用scanf读取空格

时间:2014-12-26 13:15:47

标签: c string scanf fgets

printf("Type first name:"); scanf("%[^\n]%*c",msg);
printf("Type last name: "); scanf("%[^\n]%*c",aux2);
....
printf("Type adress:"); scanf("%[^\n]%*c",aux2);
....
printf("Type phone:"); scanf("%[^\n]%*c",aux2);

我想读一些带空格的字符串。 但扫描这里没有效果.. 运行之后,我得到:"输入名字:输入姓氏:输入地址:输入电话:") 另外,我在我的代码scanf("%c",& c)`中使用`来读取一些字符......  这里的问题是什么,为什么我无法阅读这些字符串?

*编辑

2 个答案:

答案 0 :(得分:1)

当程序的执行到达您发布的\n时,似乎stdin字符(可能来自先前的输入)在输入流(scanf)中。

scanf("%[^\n]%*c",aux2);
如果它是\n中的下一个字符并且失败,

将不会扫描stdin。要修复它,只需添加一个

getchar();

在第一个scanf之前。这将吞噬\n的结尾stdin

答案 1 :(得分:1)

你的问题仍然不明显(无论如何),但是如果你想阅读包含空格的一行文字,fgets可能是最简单的解决方案。

char buf[100];
fgets(buf, sizeof(buf), stdin);

请注意,fgets在遇到\ n字符时会停止读取,但会将其附加到缓冲区。