scanf没有阅读第二次辩论

时间:2016-06-29 02:32:03

标签: c

我有以下代码,我正在尝试运行。

我希望scanf函数接受三个不同的输入,前两个是030之间的整数,第三个是以@开头的字符串。

程序编译得很好,但是当我尝试输入坐标和相关的@符号时,我会在0坐标的位置得到y

有谁知道为什么会这样或者我能做些什么来解决它? 以下是代码

#include <stdio.h>

int main(){ 
    int grid[30][30];
    int i, j;

    for(i=0; i<30;i++){    
        for(j=0; j<30;j++){
            grid[i][j]='.';
        }
    }    

    int x_coord;
    int y_coord;
    char type[2]; 

    scanf("%d %d %s",&x_coord,&y_coord,type);

    /*added extra whitespace*/
    printf("%i  %i %s",x_coord,y_coord,type);
    printf("\n");

    grid[x_coord][y_coord]=type[1];
    //end outer loop 

    for(i=0; i<30;i++){

        for(j=0; j<30;j++){
            printf("%c",grid[i][j]);
        }
        printf("\n");
    }

    return(0);
}//end main

2 个答案:

答案 0 :(得分:2)

当您宣布char type[2];并且您首先进入@然后新字符设为X时,所以在类型中它会像这样

type[0] = @

type [1]='\0'

因此您应该以这种方式声明char type[3]; 这样

type[0] = @

type [1]='X'

type [2]='\0'

它将以这种方式存储,您可以通过访问type [1]

来获取X.

答案 1 :(得分:1)

假设您正在为字符串提供@X,其中X是某个单字符,scanf将尝试使用'@''X'和'\ 0'填充类型(scanf添加空字节以标记结束字符串)

这个3个字节存储在数组中,只有两个字节足够大。