扫描C中的整数后扫描char数组

时间:2016-06-09 11:22:46

标签: c

我是编程新手。当我在扫描整数后输入char数组时,让我感到困惑。它工作不正常。 代码如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char a[30];
    int x,y;
    scanf("%d",&x);
    scanf("%[^\n]",a);
    scanf("%d",&y);
    printf("%d\n%s\n%d",x,a,y);
    return 0;
}

输出如下: enter image description here

4 个答案:

答案 0 :(得分:2)

问题源于white spaces。在scanf("%d",&x);后,最后输入的'\n'字符被保存并保存a的字符串scanf("%[^\n]",a)

为了避免这种情况,请在scanf()声明中添加空格

scanf(" %[^\n]",a);//give a space
  

为什么要留出空间?

     

通过提供空格,编译器会消耗'\n'个字符或任何字符   上一个'\0'的其他空格('\t'' 'scanf()

您的代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char a[30];
    int x,y;
    scanf("%d",&x);
    scanf(" %[^\n]",a);//give a space
    scanf("%d",&y);
    printf("%d\n%s\n%d",x,a,y);
    return 0;
}

答案 1 :(得分:1)

scanf("%[^\n]",a);替换为scanf(" %99[^\n]", a);

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char a[30];
    int x,y;

    scanf("%d",&x);
    scanf("%s",a);            // get char array without inputing space
    scanf(" %99[^\n]", a);    // get char array, allowing inputing space
    scanf("%d",&y);
    printf("%d\n%s\n%d\n",x,a,y);
    return 0;
}

答案 2 :(得分:1)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char a[30];
    int x,y;
    scanf("%d",&x);
    fflush(stdin);
    scanf("%[^\n]",a);
    fflush(stdin);
    scanf("%d",&y);
    printf("%d\n%s\n%d",x,a,y);
    return 0;
}

这也有效。同样在这里,最后的/ 0加起来进行字符扫描并干扰。使用fflush(stdin)将丢弃任何不必要的输入数据,包括/ 0。

如果我错了,请纠正我,因为我也是编码的新手。 :P

答案 3 :(得分:0)

而不是%d使用%d\n来使用换行符,以便以下命令不会只读取任何内容:

scanf("%d\n",&x);
scanf("%[^\n]",a);
scanf("%d",&y);
printf("%d\n%s\n%d",x,a,y);