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

标签 c string file csv scanf

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

相关文章:

c - 解释这个 C 代码来反转一个字符串

java - 静态数组如何存储在 Java 内存中?

c - 在初始化期间为指针分配字符串值时到底发生了什么?

java - 读取包含字符串和整数的文本文件并根据值对其进行测试(Java)

java - 安卓应用程序 : The Cache directory is empty but the device cache indicator shows that it is not empty

linux - 如何列出 WordPress 中自定义文件夹中的文件?

c - LNK1120、LNK2001、LNK2019 - 无法追踪原因

java - 格式化整数以在指定位置插入字符

c++ - 类似的字符串算法

python - 在python中用多个匹配项划分字符串