#include <stdio.h>
int main() {
char a[30];
char b[30];
scanf("%[^\n]s",a);
scanf(" %[^\n]s",b);
printf("%s \n",a);
printf("%s",b);
return 0;
}
输入:
hai
hello
输出:
hai
hello
但我期待
hai
hello
如何在你好之前打印前导空格?
答案 0 :(得分:1)
请注意%[…]
(扫描集)是完整的转换规范。代码中的s
之后永远不会匹配任何东西,但你无法发现它。换行符保留在输入中。在使用第二个扫描集之前,您必须安排阅读 - 并且格式字符串中的空格(或换行符)不是答案。用s
替换%*c
可以完成这项工作。但你现在最好不要使用scanf()
;请改用fgets()
。
scanf()
#include <stdio.h>
int main(void)
{
char a[30];
char b[30];
if (scanf("%29[^\n]%*c", a) == 1 &&
scanf("%29[^\n]%*c", b) == 1)
{
printf("[%s]\n", a);
printf("[%s]\n", b);
}
return 0;
}
输入:
hai
hello
输出:
[ hai]
[ hello]
fgets()
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[30];
char b[30];
if (fgets(a, sizeof(a), stdin) != 0 &&
fgets(b, sizeof(b), stdin) != 0)
{
a[strcspn(a, "\n")] = '\0';
b[strcspn(b, "\n")] = '\0';
printf("[%s]\n", a);
printf("[%s]\n", b);
}
return 0;
}
对于相同的输入,这会产生相同的输出。
答案 1 :(得分:0)
您可以尝试fgets
:
#include <stdio.h>
int main() {
char a[30];
char b[30];
fgets(a, 30, stdin);
fgets(b, 30, stdin);
printf("%s \n",a);
printf("%s",b);
return 0;
}