我试图创建一个文件来读取包含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,fclose,fopen,main,3
以下哪一项不是变量类型?,int,float,char,string,4
3 回答
需要使用足够大小的缓冲区 . 答案,作为一个字符串需要至少2
char
. @Danielfscanf()
应限制输入以防止缓冲区损坏 . 宽度说明符通常比缓冲区的大小小1 .fscanf()
的结果 .如果输入没有以下
','
,请不要使用"%[^,]"
作为最后一个值,否则fscanf()
将读取下一行 .建议使用空格来引导每个
"[^,]"
以跳过前导空白区域 .fgets()
读取行,然后扫描缓冲区 .answer
的缓冲区太小,所以fscanf
写得太多导致损坏 .你给它的大小只有一个字符,但
fscanf
会写入两个字符:你想要的字符,3和空字符\0
.将缓冲区大小增加到2可以解决问题 .