繁体   English   中英

读取带空格的字符串,然后从文件中的同一行读取整数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM