提问人:Tony Reirdan 提问时间:7/2/2019 最后编辑:Tony Reirdan 更新时间:7/2/2019 访问量:68
在 C 中从文件中读取字符串时出现问题
Problem with reading string from a file in C
问:
我试图寻找类似的问题,但找不到,所以我发布了这个。事情是这样的。 假设我有一个名为 text.txt 的文件。现在,该文件由 3 个整数和字符串组成,如下所示:
4 59 32 This is sentence 1
5 9 130 Grass is green
3 12 149 I need help
我还在学习 C,所以如果这是一些简单的类型问题等,我很抱歉。这就是问题所在。我不知道怎么读这个。如果字符串位于文件的开头,则也是如此,如下所示
This is sentence 1 4 59 32
Grass is green 5 9 130
I need help 3 12 149
如果我知道它将包含多少个单词,我就知道如何阅读它(例如,如果文件类似于姓名、姓氏、数字、数字),但是当我需要完整阅读时,我不知道。
这是来自评论的代码。然而,正如@john所指出的,它从一开始就是错误的,因为我得到了第一个字符,然后我做了 scanf(尽管如此,我已经尝试过,并且只涉及数字,即使读取第一个字符,fscanf 也会获得正确的值)。 我也在考虑一些涉及 isalpha() 和 isspace() 的 while 循环,但无济于事。
while((i = fgetc(input)) != (int)(EOF))
{
fscanf(inputFile, "%d %d %d", &num1, &num2, &num3);
j=0;
while(i != (int)('\n'))
{
string[j++]=(char)i;
i = fgetc(inputFile);
}
string[j] = '\0';
printf("%d %d %d %s\n",br1, br2, br3, string);
答:
0赞
Armali
7/2/2019
#1
从一开始就是错误的,因为我得到了第一个字符,然后我做了扫描
你是对的,这是错的。没有必要仅仅为了测试 EOF 而使用行的第一个字符 - 我们可以将其留给 .
此外,无需逐个读取字符串的字符 - 可以读取以 转换规范结尾的字符串。
如果输入字符串长度不受限制,则当输入字符串需要的内存多于提供内存时,我们必须通过添加最大字段宽度来防止缓冲区溢出。例如,如果定义了 ,则最大字段宽度为 99,因为终止 null 字符需要最后一个。
因此,我们可以写例如。fscanf()
fscanf()
\n
%[^\n]
string
char string[100];
char
while (fscanf(input, "%d %d %d %99[^\n]", &num1, &num2, &num3, string) == 4)
printf("%d %d %d %s\n", num1, num2, num3, string);
评论