Monday, May 20, 2019

string - fscanf csv in C. Value not assigned

Answer


Answer




I have attempted to make a file to read a text file that contains CSVs. For some reason however some of the Fscanfs do not return a value but some do.




FILE* reader;
char OptionOne[30]="";
char OptionTwo[30]="";
char OptionThree[30]="";
char OptionFour[30]="";
char answer[1]="";
char CorrectAnswer[1];
char Question[51];

reader = fopen("C:\\Users\\Finley\\Desktop\\Programming\\QuizMachine\\QuizMachine\\fscanf_questions.txt", "r");


if (reader == NULL)
{
printf("Unable to Open File: %s\n", FileName);
}

fscanf(reader, "%[^,],", Question);
fscanf(reader, "%[^,],", OptionOne);
fscanf(reader, "%[^,],", OptionTwo);
fscanf(reader, "%[^,],", OptionThree);

fscanf(reader, "%[^,],", OptionFour);
fscanf(reader, "%[^,],", answer);


Why does the first fscanf return a value but all the others not return a value. I cannot see anything and they all seem the same with the same formating
File formatting is like this:



What function do you use to open a file?,fscanf,fclose,fopen,main,3



Which of the following is not a variable type?,int,float,char,string,4



Answer




  1. Need to use buffers of adequate size. The answer, as a string needs at least 2 char.@Daniel


  2. fscanf() should limit input to prevent buffer corruption. The width specifier is typically 1 less than the size of the buffer.



    char Question[51];   
    fscanf(reader, "%50[^,],", Question);

  3. The result of fscanf() should be checked.




    if (fscanf(reader, "%50[^,],%29[^,],%29[^,],%29[^,],%29[^,],%1s", 
    Question, OptionOne, OptionTwo, OptionThree, OptionFour, answer) != 6) {
    Handle_Bad_input();
    }

  4. Do not use "%[^,]" for the last value if input does not have a following ',', else fscanf() will read the next line.


  5. Suggest leading each "[^,]" with a space to skip leading white-space.



    if (fscanf(reader, " %50[^,], %29[^,], %29[^,], %29[^,], %29[^,],%1s", 


  6. Even better: Read the line with fgets() and then scan the buffer.



    char buf[200];
    if (fgets(buf, sizeof buf, reader) == NULL) Handle_IOErrorOrEOF();
    if (sscanf(buffer, "%50[^,],%29[^,],%29[^,],%29[^,],%29[^,],%1s",
    Question, OptionOne, OptionTwo, OptionThree, OptionFour, answer) != 6) {
    Handle_Bad_input();
    }



No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...