使用fscanf逐行阅读

时间:2017-07-01 15:27:23

标签: c scanf

我想读一个包含3行的文件:

第一个带字符串,第二个带数字,第三个带字符串。

示例:

第1行:鸟玩具书电脑水

第2行:2

第3行:玩具水

我有这个代码,它读取一个文件,逐字地将它们存储在字数组中,然后将这个单词放入单词2d数组中。

char words [5][50];
char word [50];
int i,j;
j = 0;

while( (fscanf(file, "%s", word))!=EOF ){
    for(i = 0; i<50; i++){
        if(word[i] != NULL){
            words[j][i] = word[i];
        } else{
            break;
        }
    }
    j++;

}

它正在工作,但是它读取了所有行,我想要一种方法来为第一行执行此过程,然后将第二行存储到int变量中,将第三行存储到另一个2d数组中。

1 个答案:

答案 0 :(得分:5)

详细了解fscanf不适合逐行读取

请考虑使用fgets或更好(在POSIX上)使用getline阅读每一行(请参阅this),然后使用sscanf解析每一行。它的返回值(从sscanf等给出的扫描项目的数量...)可能对测试很有用(您可能还希望在扫描控制格式字符串中使用%n;作为{{3评论,另请阅读%ms赋值分配修饰符,至少在POSIX系统上,请参阅Linux Jonathan Leffler)。

顺便说一句,像50这样的单词长度的硬编码限制很糟糕(而不是sscanf(3))。考虑或许更系统地使用robust(使用C dynamic memory allocation)和指针,或许在某些struct中使用malloc, free and friends -