我在打印带有空格的字符串时遇到问题。以下代码有什么问题,我该如何避免?
#include <stdio.h>
int main()
{
char str[50];
int t;
scanf("%d",&t);
while(t--)
{
scanf("%[^\n]%*c", str);
printf("%s\n", str);
}
return 0;
}
输入:2
我被爱
我来自我们
输出的输出是一些奇怪的字符
有人可以帮我吗!
答案 0 :(得分:2)
以下代码有什么问题
scanf("%d",&t)
仅消耗输入中的2
,而不消耗其后的\n
,因此所有scanf("%[^\n]%*c", str)
都遇到\n
并立即返回,不消耗任何输入,也不向str
读任何东西,而留下未定义的内容。
我该如何避免呢?
如果您不介意跳过前导空格,可以使用scanf(" %[^\n]", str)
。
答案 1 :(得分:-1)
%[^\n]
遇到换行符后即停止读取,即使未读取任何字符也是如此。因此,str
数组在scanf
之后保持未初始化状态。这就是printf
打印奇怪字符的原因。
只需将"%[^\n]%*c"
更改为"%*c%[^\n]"
即可。