Sign in to follow this  
Aaron Lowry

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

Recommended Posts

Aaron Lowry    98

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

Share this post


Link to post
Share on other sites
Cornstalks    7030

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

Share this post


Link to post
Share on other sites
Aaron Lowry    98

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.

Share this post


Link to post
Share on other sites
rip-off    10976

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.

Share this post


Link to post
Share on other sites
rip-off    10976

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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this