繁体   English   中英

为什么scanf无法正常工作

[英]why doesn't scanf work properly

我想在数组中一个接一个地输入16个字符...

#include<stdio.h>
void main(){
 int i,j;
 char a[4][4];
printf("Enter Values in array : ");
for ( i=0 ; i<=3 ; i++ )
{
for ( j=0 ; j<=3 ; j++ )
{
    printf("a[%d][%d] : ",i,j);
    scanf("%c",&a[i][j]);
}}
for ( i=0 ; i<=3 ; i++ )
{
for ( j=0 ; j<=3 ; j++ )
{
    printf("a[%d][%d] : %c\n",i,j,a[i][j]);
}}}

输出是

a[0][0] : q
a[0][1] : a[0][2] : w
a[0][3] : a[1][0] : e
a[1][1] : a[1][2] : r
a[1][3] : a[2][0] : t
a[2][1] : a[2][2] : y
a[2][3] : a[3][0] : u
a[3][1] : a[3][2] : i
a[3][3] :

为什么我不能输入a [0] [1],a [0] [3]等等。...为什么它们被跳过...并且还请告诉一个更好的方法来使其工作...

scanf()将换行符留在输入缓冲区中,以供后续调用使用。

告诉scanf()跳过空格。

scanf(" %c",&a[i][j]); // Notice the space in the format string

格式说明符中的空格使scanf()在读取字符之前忽略任何空白字符(对于%c

这是使用C语言进行字符输入时的问题。 当我们键入一个字符并按ENTER键时,ENTER的ASCII值将成为下一个scanf的值。

您需要刷新标准输入缓冲区,为此,您应该编写fflush(stdin)。

 #include<stdio.h>

    void main(){

    int i,j;
    char a[4][4];
    printf("Enter Values in array : ");

    for ( i=0 ; i<=3 ; i++ )
    {
    for ( j=0 ; j<=3 ; j++ )
    {
        printf("a[%d][%d] : ",i,j);
        scanf("%c",&a[i][j]);
        fflush(stdin);// will clear the input buffer stdin

    }
    }
    for ( i=0 ; i<=3 ; i++ )
    {
    for ( j=0 ; j<=3 ; j++ )
    {
        printf("a[%d][%d] : %c\n",i,j,a[i][j]);
    }
    }
    }

KingsIndian的回答解释了这个问题。

作为解决方案,我将使用getchar()或getwchar()(请参见man 3 getchar)。 通过一次阅读角色广告,您可以:

  1. 检查您读取的字符是否属于您期望的类型(请参阅ctype.h或wctype.h)

  2. 丢弃不需要的内容,例如空格,CR,LF选项卡等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM