我正在尝试让我的程序从文件读取输入但不跳过fscanf通常执行的空行。扫描文件的文件和循环是:
inFile = fopen("text.txt", "r");
for(i = 0; fscanf(inFile, "%s", &input[i]) != EOF; i++){
printf("%d %s\n", i, input[i]);
}
输出:
0 one
1 two
2 three
3 four
4 five
5 six
6 seven
7 eight
8 nine
9 ten
10 eleven
11 twelve
12 thirteen
13 fourteen
14 fifteen
15 sixteen
16 seventeen
17 eighteen
18 nineteen
19 twenty
20 thirty
21 forty
22 fifty
23 sixty
24 seventy
25 eighty
26 ninety
这不是我想要的。我希望读取的文本代表它所说的数组中的位置。即在输入[89]处找到“九十”。
,正在读取的文件是:
one
two
three
four
five
six
seven
eight
nine
ten
eleven
twelve
thirteen
fourteen
fifteen
sixteen
seventeen
eighteen
nineteen
twenty
thirty
forty
fifty
sixty
seventy
eighty
ninety
这些单词中的每一个都应该代表它正在读取哪一行。我在20多行之间添加了空格,所以我可以使用i来表示正在读取的数据行。简而言之,我正在编写一个能够读取的文本生成器
999.99
作为
nine hundred ninety-nine and 99/100
tl; dr我不想硬编码包含单词的数组中的位置,所以我试图让迭代器完成工作,并且需要读取空行以占据其位置数组。
我能以任何方式让fscanf在这里完成这项工作吗?或者我应该使用其他东西吗?
谢谢
答案 0 :(得分:2)
我认为你最好不要使用fgets()
。如有必要,您可以在结果字符串上使用sscanf()
来解析它。
编辑 - 这样的事情:
inFile = fopen("text.txt", "r");
size_t i = 0;
while (fgets(input[i], LINE_SIZE, inFile))
{
printf("%d %s\n", i, input[i]);
++i;
}
答案 1 :(得分:2)
您应该查看fgets()
,因为它会读取所有内容,包括换行符。记住线条不是空白,它们只是新线条。此外,fgets()
是一个更安全的选择而不是fscanf()
。