读取带空格的字符串,然后从文件中的同一行读取整数
reading string with spaces and then integers from same line in file
所以标题说明了一切,我创建了一个非常简单的代码来测试它,但我无法让它工作。
该文件只有一行,它是“asd dsa:1 2 3”
我想将“asd dsa”存储在一个字符串变量中,并将每个数字存储在一个不同的 int 变量中。
这是代码:
#include<stdio.h>
int main(){
FILE *fp;
fp=fopen("file.dat","r");
char aa[20];
int a, b, c;
fscanf(fp, "%[^:]%d %d %d", aa, &a, &b, &c);
printf("%s %d %d %d\n", aa, a, b, c);
return 0;
}
输出为
asd dsa 21911 1313271752 32720
所以它只读取字符串。
我强烈建议您以后学习如何调试您的代码。老实说,我没有在顶部找到解决方案,所以我复制了代码,然后 运行 在我的机器上,我得到了错误的输出,就像你一样。然后,我调试了我的代码,我注意到字符串被正确读取,数字保持不变。为了确保,我创建了一个变量来保存来自 scanf 的 return 值,实际上它是 1,因为只有字符串正在获取输入。
然后我先绑在%[^:]
和%d
之间加一个space,但是没有用。然后我再次查看文件,发现 aa
变量上的字符串并注意到 :
在文件中,但不在 aa
中。它去哪儿了?无处可寻,它仍在缓冲区中等待读取。为了“跳过”它,您可以在 %[^:]
之后添加 :
符号,这样命令就会“吃掉它”,并且在我的机器上完成后它起作用了。
简短的回答是将 scanf 行更改为:
fscanf(fp, "%[^:]:%d %d %d", aa, &a, &b, &c);
长答案是学习如何正确调试代码,我花了不到 2 分钟的时间就弄明白了,我相信如果您自己尝试,也可以找到解决方案。
当然如果你自己调试无果,欢迎随时开题!
所以标题说明了一切,我创建了一个非常简单的代码来测试它,但我无法让它工作。 该文件只有一行,它是“asd dsa:1 2 3” 我想将“asd dsa”存储在一个字符串变量中,并将每个数字存储在一个不同的 int 变量中。 这是代码:
#include<stdio.h>
int main(){
FILE *fp;
fp=fopen("file.dat","r");
char aa[20];
int a, b, c;
fscanf(fp, "%[^:]%d %d %d", aa, &a, &b, &c);
printf("%s %d %d %d\n", aa, a, b, c);
return 0;
}
输出为
asd dsa 21911 1313271752 32720
所以它只读取字符串。
我强烈建议您以后学习如何调试您的代码。老实说,我没有在顶部找到解决方案,所以我复制了代码,然后 运行 在我的机器上,我得到了错误的输出,就像你一样。然后,我调试了我的代码,我注意到字符串被正确读取,数字保持不变。为了确保,我创建了一个变量来保存来自 scanf 的 return 值,实际上它是 1,因为只有字符串正在获取输入。
然后我先绑在%[^:]
和%d
之间加一个space,但是没有用。然后我再次查看文件,发现 aa
变量上的字符串并注意到 :
在文件中,但不在 aa
中。它去哪儿了?无处可寻,它仍在缓冲区中等待读取。为了“跳过”它,您可以在 %[^:]
之后添加 :
符号,这样命令就会“吃掉它”,并且在我的机器上完成后它起作用了。
简短的回答是将 scanf 行更改为:
fscanf(fp, "%[^:]:%d %d %d", aa, &a, &b, &c);
长答案是学习如何正确调试代码,我花了不到 2 分钟的时间就弄明白了,我相信如果您自己尝试,也可以找到解决方案。
当然如果你自己调试无果,欢迎随时开题!