为什么输出ASCII码不注释掉其他行就会执行错误
问题描述:
//注释掉其他行就可以正常输出ASCII码
int main()
{
int a, b;
float x, y;
char c1, c2;
//printf("please scanf a,b;\n");
//scanf("%d,%d", &a, &b);
//printf("please scanf x,y;\n");
//scanf("%f,%f", &x, &y);
//printf("please scanf c1,c2;\n");
scanf("%c,%c", &c1, &c2);
//printf("%d,%d,%.2f,%.2f,\n",a,b,x,y);
printf("%c,%c", c1, c2);
return 0;
}
//删掉注释就无法正常输出
int main()
{
int a, b;
float x, y;
char c1, c2;
printf("please scanf a,b;\n");
scanf("%d,%d", &a, &b);
printf("please scanf x,y;\n");
scanf("%f,%f", &x, &y);
printf("please scanf c1,c2;\n");
scanf("%c,%c", &c1, &c2);
printf("%d,%d,%.2f,%.2f,\n",a,b,x,y);
printf("%c,%c", c1, c2);
return 0;
}
注释掉其他行正常输出
取消注释输出错误
答
scanf()处理%d和%f的时候,都会自动过滤掉前面的空格或者换行符,而处理%c的时候,会将\n或者空格都原样的读入,而不会过滤。
问题应该出在了你scanf("%c,%c")的时候。在此之前你输入两个浮点数的时候,换行符送到了c1里面。
解决方案,在最后一个scanf("%c")之前,加入一个getchar();以消除换行符对你程序的影响。