char s1[50], s2[50], s3[50];
scanf("%[^\n]", &s1);
scanf("%[^\n]", &s2);
scanf("%[^\n]", &s3);
在s1输入带空格的字符串后,会直接跳过s2和s3的输入,这是怎么回事啊
读取字符串变量前面不需要加&
scanf("%[^\n]", s1);
scanf("%[^\n]", s2);
scanf("%[^\n]", s3);
因为前面 scanf("%[^\n]", s1);用户输入了数据和换行符‘\n’,在读取了非换行符‘\n’的数据之后,输入缓存里就残留了一个‘\n’。
再次使用scanf("%[^\n]", s2);还会读取到输入缓存里上次残留的‘\n’,也就是读取了一个空字符串,而不是读取新输入的字符。
可以在用下一个scanf("%[^\n]", s2);读取字符串前用 setbuf(stdin, NULL); 清除输入缓存。 或者用getchar() 把缓存里上次残留的‘\n’先读取掉
你题目的解答代码如下:
#include<stdio.h>
int main()
{
char s1[50], s2[50], s3[50];
scanf("%[^\n]", s1);
setbuf(stdin, NULL);
scanf("%[^\n]", s2);
setbuf(stdin, NULL);
scanf("%[^\n]", s3);
printf("%s\n", s1);
printf("%s\n", s2);
printf("%s\n", s3);
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
有很多方法输入一行包括空格,比如gets()
, gets_s()
, fgets()
,以及getchar()
加循环
#include <stdio.h>
#define N 50
int main()
{
char s1[N], s2[N], s3[N];
fgets(s1, N, stdin);
fgets(s2, N, stdin);
fgets(s3, N, stdin);
printf("%s", s1);
printf("%s", s2);
printf("%s", s3);
return 0;
}