为什么输出ASCII码不注释掉其他行就会执行错误

为什么输出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();以消除换行符对你程序的影响。