3

我试图让我的程序从文件中读取输入,但不跳过 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;博士我不想硬编码数组中包含单词的位置,所以我试图让迭代器完成工作,这需要读取的空行占据它们在数组中的位置。

有什么办法可以让 fscanf 在这里完成工作吗?还是我应该使用其他东西?

谢谢

4

2 回答 2

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;
}
于 2013-02-19T17:35:08.970 回答
2

您应该查看fgets()它读取所有内容,包括换行符。请记住,这些行不是空白的,它们只是新行。此外,fgets()这是一个fscanf().

于 2013-02-19T17:52:17.903 回答