c语言字符数组如何不读入回车

本人c语言萌新,想请问如何在读入字符数组时,不把数字后面的回车输进字符数组?如何修改?
#include<stdio.h>
void main()
{
int n,i;
scanf("%d",&n);
char a[n];
for(i=0;i<n;i++)
scanf("%c",&a[i]);
for(i=0;i<n;i++)
printf("%c",a[i]);
}

针对你的问题,在scanf("%d",&n);后面加一句getchar()即可。
另外,C语言中不能使用变量定义数组的大小,char a[n];这么写是不对的。
代码如下:

#include<stdio.h>
void main()
{
    int n,i;
    scanf("%d",&n);
    getchar(); //这里接收回车符
    char a[10000];//这里不能用变量,可以用一个比较大的数
    //如果学过malloc的话,可以用malloc动态申请内存,如下
    //char *a = (char*)malloc(n+1);
    for(i=0;i<n;i++)
        scanf("%c",&a[i]);
    for(i=0;i<n;i++)
        printf("%c",a[i]);
}

#include<stdio.h>
void main()
{
int n,i;
scanf("%d",&n);
char a[n];
gets(a);
for(i=0;i<n;i++)
printf("%c",a[i]);
}

因为前面 scanf("%d",&n);用户输入了数据和换行符‘\n’,在读取了数据之后,输入缓存里就残留了一个‘\n’。
再次使用scanf("%c")会读取输入缓存里上次残留的‘\n’,而不是读取新输入的字符。这样就造成了严重的错误。

可以在用 scanf("%c",&a[i]); 读取字符前用 setbuf(stdin, NULL); 清除输入缓存。
你题目的解答代码如下:

#include<stdio.h>
void main()
{
    int n,i;
    scanf("%d",&n);
    char a[n];
    setbuf(stdin, NULL);
    for(i=0;i<n;i++)
        scanf("%c",&a[i]);
    for(i=0;i<n;i++)
        printf("%c",a[i]);
}

img

或者用 scanf("%1s",&a[i]); 读取字符,用"%1s"会跳过空格与换行符,读取一个非空格与换行符的字符。

如有帮助,望采纳!谢谢!