有没有人告诉我这是为何?
理论上来说应该是x1=98,x2=765,y1=4,y2=1
但是在Clion上x2输出12851,我试过另外一台电脑,用的Visual C++6.0,是理论值。但这台电脑不是,是哪里的配置有问题吗
#include
void main() {
int x1,x2;
char y1,y2;
scanf("%2d%3d%3c%c",&x1,&x2,&y1,&y2);
printf("x1=%d,x2=%d,y1=%c,y2=%c\n",x1,x2,y1,y2);
}
9876543210
x1=98,x2=12851,y1=4,y2=1
问题出在%3c
身上。因为%c
每次只会读入一个字符,%3c
尽管圈定了3个字符,但是只会读入一个。对于剩下的字符不同编译器的处理会有差异。有的会丢弃掉,有的会依然放在缓冲区。大部分编译器对于未读入的数据都会放在缓冲区,因此读入y1后,缓冲区剩下的数据影响了前一个值。
总之读入数据时不要用%nc
,会带来不可预知的结果。