扫描带有空格的字符串

时间:2018-07-23 05:44:23

标签: c string

我在打印带有空格的字符串时遇到问题。以下代码有什么问题,我该如何避免?

#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
    我被爱     我来自我们
    输出的输出是一些奇怪的字符
    有人可以帮我吗!

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]"即可。