未分配值fscanf csv
我试图制作一个文件来读取包含CSV的文本文件。 但是由于某些原因,一些Fscanfs并没有返回一个值,但有些值得。
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:UsersFinleyDesktopProgrammingQuizMachineQuizMachinefscanf_questions.txt", "r");
if (reader == NULL)
{
printf("Unable to Open File: %sn", FileName);
}
fscanf(reader, "%[^,],", Question);
fscanf(reader, "%[^,],", OptionOne);
fscanf(reader, "%[^,],", OptionTwo);
fscanf(reader, "%[^,],", OptionThree);
fscanf(reader, "%[^,],", OptionFour);
fscanf(reader, "%[^,],", answer);
为什么第一个fscanf会返回一个值,但其他所有其他人都不会返回一个值。 我看不到任何东西,它们看起来都与相同的格式相同文件格式是这样的:
你用什么函数打开一个文件?,fscanf,fclose,fopen,main,3
下列哪一项不是变量类型?,int,float,char,string,4
需要使用足够大小的缓冲区。 答案,作为一个字符串需要至少2个char
。@丹尼尔
fscanf()
应限制输入以防止缓冲区损坏。 宽度说明符通常比缓冲区的大小小1。
char Question[51];
fscanf(reader, "%50[^,],", Question);
应该检查fscanf()
的结果。
if (fscanf(reader, "%50[^,],%29[^,],%29[^,],%29[^,],%29[^,],%1s",
Question, OptionOne, OptionTwo, OptionThree, OptionFour, answer) != 6) {
Handle_Bad_input();
}
如果输入没有后面的','
,则不要使用"%[^,]"
作为最后的值,否则fscanf()
将读取下一行。
建议使用空格来引导每个"[^,]"
以跳过前导空格。
if (fscanf(reader, " %50[^,], %29[^,], %29[^,], %29[^,], %29[^,],%1s",
更好:用fgets()
读取行,然后扫描缓冲区。
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();
}
你的缓冲区的answer
太小,所以fscanf
写入太多导致腐败。
你给它的大小只有一个字符,但fscanf
会写入两个字符:你想要的字符3和空字符