gpt4 book ai didi

c - C 中的 fscanf csv。未分配值

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:23 24 4
gpt4 key购买 nike

我试图创建一个文件来读取包含 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

最佳答案

  1. 需要使用足够大小的缓冲区。答案是,作为一个字符串至少需要 2 个 char@Daniel

  2. fscanf() 应该限制输入以防止缓冲区损坏。宽度说明符通常比缓冲区的大小小 1。

    char Question[51];   
    fscanf(reader, "%50[^,],", Question);
  3. 应该检查 fscanf() 的结果。

    if (fscanf(reader, "%50[^,],%29[^,],%29[^,],%29[^,],%29[^,],%1s", 
    Question, OptionOne, OptionTwo, OptionThree, OptionFour, answer) != 6) {
    Handle_Bad_input();
    }
  4. 如果输入没有后面的 ',',不要使用 "%[^,]" 作为最后一个值,否则 fscanf () 将读取下一行。

  5. 建议在每个 [^,]" 前加一个空格以跳过前导空白。

    if (fscanf(reader, " %50[^,], %29[^,], %29[^,], %29[^,], %29[^,],%1s", 
  6. 甚至更好:使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com