Jump to content

  • Log In with Google      Sign In   
  • Create Account


My C mess... But seriously could use some help please.


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 currentlyCing   Members   -  Reputation: 98

Like
-2Likes
Like

Posted 23 May 2013 - 10:35 AM

Hey guys I'm new to the C language and have only been studying it for about 14 weeks now and with my assignment I have hit a major brick in the road.

 

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include"structHeader.h"


void main()
{
FILE *inFile;
FILE *outFile;




if((inFile=fopen("Modules.txt","r"))==NULL)
{
printf("File Not Open");
exit(1);
}
if((outFile=fopen("Report.txt","w"))==NULL)
{
printf("File Not Open");
exit(1);
}


fprintf(outFile,"Students Marks Listed by Module\n\n");
printf("Students Marks Listed by Module\n\n");
finaltotals.marks=0;
while(!feof(inFile))
{
fscanf(inFile,"%[^,],%d%*c", course.modName, &course.studentRecords);
fprintf(outFile,"%s\n\n", course.modName);
printf("%s\n\n", course.modName);


fscanf(inFile,"%[^,],%d,%d%*c",records.studentName, &records.firstMark, &records.secondMark);
loops.lengthstring=strlen(records.studentName);
for (loops.forloop=0;loops.forloop<course.studentRecords;loops.forloop++)
{
finaltotals.marks+=records.firstMark+records.secondMark;


for(loops.characterLoop=0;loops.characterLoop<loops.lengthstring;loops.characterLoop++)
{
if(loops.characterLoop==0)
{
records.studentName[loops.characterLoop]=toupper(records.studentName[loops.characterLoop]);
fprintf(outFile,"%c", records.studentName);
printf("%c", records.studentName);
}
//it skips the next if statement all together... It should test the statement and when it is true it should enter... but it doesn't.
if(records.studentName[loops.characterLoop]==' ')
{
loops.characterLoop++;
records.studentName[loops.characterLoop]=toupper(records.studentName[loops.characterLoop]);
fprintf(outFile,"%-5s", records.studentName);
printf("%-19s", records.studentName);
}
fprintf(outFile,"%-19d %-19d\n", records.firstMark, records.secondMark);
printf("%-19d %-19d\n", records.firstMark, records. secondMark);
fscanf(inFile,"%[^,],%d,%d%*c",records.studentName, &records.firstMark, &records.secondMark);
}


fscanf(inFile,"%[^,],%d%*c", course.modName, &course.studentRecords);
fprintf(outFile,"%s\n\n", course.modName);
printf("%s\n\n", course.modName);
finaltotals.studentNum=0;
finaltotals.studentNum+=course.studentRecords;
}


}




system("pause");
}
 

Here is my structHeader.h

 

 

struct Module
{
int studentRecords;


char modName[50];
}course;
struct Enrolment
{
int firstMark,
secondMark;


char studentName[30];
}records;
struct Looping
{
int forloop,
lengthstring,
characterLoop;
}loops;
struct Totals
{
int marks,
studentNum;
}finaltotals;

 

 

 

 

 

Any feedback is much obliged.


Edited by currentlyCing, 23 May 2013 - 10:37 AM.

'...when you have eliminated all which is impossible,

then whatever remains, however improbable, must be the truth.'

 

Sherlock Holmes.


Sponsor:

#2 Cornstalks   Crossbones+   -  Reputation: 6974

Like
0Likes
Like

Posted 23 May 2013 - 10:46 AM

And this major brick in the road is... what?

 

And this is a coding horror because... why?

 

Also, try editing your post to fix the indentation (you may have to do a search and replace in the code to convert tabs to sets of 4 spaces).

 

Edit: If you're talking about the problem mentioned in that one comment, have you stepped through your code with a debugger?


Edited by Cornstalks, 23 May 2013 - 10:49 AM.

[ I was ninja'd 71 times before I stopped counting a long time ago ] [ f.k.a. MikeTacular ] [ My Blog ] [ SWFer: Gaplessly looped MP3s in your Flash games ]

#3 currentlyCing   Members   -  Reputation: 98

Like
0Likes
Like

Posted 23 May 2013 - 11:05 PM

Sorry should of been more specific. It was about 3am and I was very tired... anyways I am reading from my inFile and writing to my outFile. Now the code works in the manner of reading the file and writing it to the outfile, need to format the print though, but the toupper loop isn't working... it won't jump into the second loop once the for loop has reached the ' ' (char space) and then jump into the 'if' statement. 

 

Now I ran a smaller version of the code I want to work and it works great but in the build I have above doesn't. Even though I have copied it from one that does.


'...when you have eliminated all which is impossible,

then whatever remains, however improbable, must be the truth.'

 

Sherlock Holmes.


#4 rip-off   Moderators   -  Reputation: 8164

Like
0Likes
Like

Posted 24 May 2013 - 03:38 AM

Your code is very confusing because you have placed the loop counters in a global structure. This is not idiomatic. Generally one creates a local variable to handle loop counters.

 

When I compile your code:

 
user@host:~$ gcc main.c -Wall
main.c:9:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]
main.c: In function ‘main’:
main.c:46:21: warning: format ‘%c’ expects argument of type ‘int’, but argument 3 has type ‘char *’ [-Wformat]
main.c:47:21: warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘char *’ [-Wformat]

Executing code that contains such errors is prone to "undefined behaviour", which can result in surprising things happening. There are some other places where you are doing things wrong too, that the compiler cannot help you with.

 

Sorry should of been more specific. It was about 3am and I was very tired... anyways I am reading from my inFile and writing to my outFile. Now the code works in the manner of reading the file and writing it to the outfile, need to format the print though, but the toupper loop isn't working... it won't jump into the second loop once the for loop has reached the ' ' (char space) and then jump into the 'if' statement. 

Have you run your code in a debugger?

 

Now I ran a smaller version of the code I want to work and it works great but in the build I have above doesn't. Even though I have copied it from one that does.

This is another excellent way of diagnosing such errors. Try again, but copy a little more of the program each time, until it starts misbehaving.

 

Another idea is to use a very simple input file, consisting of a single course with a single student record, when debugging your program.



#5 rip-off   Moderators   -  Reputation: 8164

Like
0Likes
Like

Posted 24 May 2013 - 03:40 AM

I've moved this to "For Beginners", "Coding Horrors" is a forum for humourous snippets, usually encountered by experienced programmers reading their own or their colleague's code.






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS