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

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 分钟的时间就弄明白了,我相信如果您自己尝试,也可以找到解决方案。

当然如果你自己调试无果,欢迎随时开题!