我想读一个包含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数组中。
答案 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 -