我有以下代码,我正在尝试运行。
我希望scanf
函数接受三个不同的输入,前两个是0
和30
之间的整数,第三个是以@
开头的字符串。
程序编译得很好,但是当我尝试输入坐标和相关的@
符号时,我会在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
答案 0 :(得分:2)
当您宣布char type[2];
并且您首先进入@
然后新字符设为X
时,所以在类型中它会像这样
type[0] = @
type [1]='\0'
因此您应该以这种方式声明char type[3];
这样
type[0] = @
type [1]='X'
type [2]='\0'
它将以这种方式存储,您可以通过访问type [1]
答案 1 :(得分:1)
假设您正在为字符串提供@X,其中X是某个单字符,scanf将尝试使用'@''X'和'\ 0'填充类型(scanf添加空字节以标记结束字符串)
这个3个字节存储在数组中,只有两个字节足够大。