我试图创建一个文件来读取包含 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:\\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);
为什么第一个 fscanf 有返回值,而其他所有 fscanf 都没有返回值。我什么都看不到,它们看起来都一样,格式也一样 文件格式是这样的:
打开文件用什么函数?,fscanf,fclose,fopen,main,3
下列哪个不是变量类型?,int,float,char,string,4
最佳答案
需要使用足够大小的缓冲区。答案是,作为一个字符串至少需要 2 个
char
。 @Danielfscanf()
应该限制输入以防止缓冲区损坏。宽度说明符通常比缓冲区的大小小 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(); }
关于c - C 中的 fscanf csv。未分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27208976/