在扫描C中的整数后扫描字符数组

在扫描C中的整数后扫描字符数组,c,C,我是个编程新手。当我扫描一个整数后输入一个字符数组时,我感到很困惑。它不能正常工作。 代码如下: #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);

我是个编程新手。当我扫描一个整数后输入一个字符数组时,我感到很困惑。它不能正常工作。 代码如下:

#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;
}
#包括
#包括
int main()
{
chara[30];
int x,y;
scanf(“%d”和&x);
scanf(“%[^\n]”,a);
scanf(“%d”和“&y”);
printf(“%d\n%s\n%d”,x,a,y);
返回0;
}
结果如下:

替换
scanf(“%[^\n]”,a)带有
scanf(“%99[^\n]”,a)

#包括
#包括
int main()
{
chara[30];
int x,y;
scanf(“%d”和&x);
scanf(“%s”,a);//在不输入空间的情况下获取字符数组
scanf(“%99[^\n]”,a);//获取字符数组,允许输入空间
scanf(“%d”和“&y”);
printf(“%d\n%s\n%d\n”,x,a,y);
返回0;
}

使用
%d\n
而不是
%d
来使用换行符,这样下面的命令就不会什么都不读了:

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

问题是由于
扫描后的
空格(“%d”和&x)造成的
最后输入的
'\n'
字符被提取并保存为
scanf(“%[^\n]”,a)
的字符串
a


要避免这种情况,请在
scanf()
语句中留出空间

scanf(" %[^\n]",a);//give a space
为什么要留出空间?

通过提供空格,编译器将使用
'\n'
字符或任何 上一个
scanf()中的其他空白(
'\0'
'\t'
'


您的代码

#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;
}
#包括
#包括
int main()
{
chara[30];
int x,y;
scanf(“%d”和&x);
scanf(“%[^\n]”,a);//给一个空格
scanf(“%d”和“&y”);
printf(“%d\n%s\n%d”,x,a,y);
返回0;
}
#包括
#包括
int main()
{
chara[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);
返回0;
}
这也行得通。这里也是一样,结尾处的/0加起来就是字符扫描和干扰。使用
fflush(stdin)
将丢弃任何不必要的输入数据,包括/0


如果我错了,请纠正我,因为我也是编码新手p

这就是为什么要检查
scanf()
的返回值。我无法理解这一点。C11标准草案n1570:7.21.6.2 fscanf函数返回16如果在第一次转换(如果有)完成之前发生输入故障,fscanf函数返回宏EOF的值。否则,该函数将返回指定的输入项的数量,如果早期匹配失败,该数量可能会少于所提供的数量,甚至为零。除非答案建议从
scanf()
检查返回值,否则答案可能会重复。节省时间1)始终检查输入函数的返回值。阅读文档以了解预期的返回值。2) 最好使用
fgets()
而不是
scanf()
。替换顺序不对!但是我想带走space@Murad替换
scanf(“%s”,a)带有
scanf(“%99[^\n]”,a),有效。@Murad您不能要求向上投票。如果会员认为你的问题在这里提问之前已经被研究过,并且有有用的信息,那没关系。我不知道。但是我想去太空。谢谢。如果可能的话,请把我的问题投上一票。
#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;
}
#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;
}