[英]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;
}
output 是
asd dsa 21911 1313271752 32720
所以它只读取字符串。
我强烈建议将来学习如何调试代码。 老实说,我没有在顶部找到解决方案,所以我复制了代码,然后在我的机器上运行,我得到了错误的 output,就像你一样。 然后,我调试了我的代码,我注意到字符串被正确读取,并且数字保持不变。 为了确保这一点,我创建了一个变量来保存 scanf 的返回值,实际上它是 1,因为只有字符串获取输入。
然后我首先绑定在%[^:]
和%d
之间添加一个空格,但无济于事。 然后我再次查看文件,我在aa
变量上得到的字符串注意到:
在文件中,但不在aa
中。 它在哪里 go? 无处可去,它仍在缓冲区中等待读取。 为了“跳过”它,您可以在%[^:]
之后添加:
符号,这样命令就会“吃掉它”,并且在我的机器上执行它之后它就可以工作了。
简短的回答是将 scanf 行更改为:
fscanf(fp, "%[^:]:%d %d %d", aa, &a, &b, &c);
长答案是学习如何正确调试代码,我花了不到 2 分钟的时间就弄清楚了,我相信如果你自己尝试过,你也能找到解决方案。
当然,如果您尝试自己调试无济于事,随时欢迎您打开话题!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.