这个测试数据类型的C语言小程序为何结果出错?

来源:百度知道 编辑:UC知道 时间:2024/05/14 15:57:23
#include<stdio.h>
void main() {
int a,b;
float c,d;
char c1,c2;
scanf("%d,%d",&a,&b);
scanf("%f,%f",&c,&d);
scanf("%c,%c",&c1,&c2);
printf("\n");
printf("a=%7d,b=%7d\n",a,b);
printf("c=%10.2f,d=%10.2f\n",c,d);
printf("c1=%c,c2=%c\n",c1,c2);
}

测试用的数据是 a=123,b=456,c=17.6,d=71837.65, c1=’a’,c2=’b’
主要看c1和c2的结果,竟然不是'a'和‘b’
需要告诉大家的是,如果把printf("c1=%c,c2=%c\n",c1,c2); 改成printf(" c1=%c,c2=%c\n",c1,c2);注意多了个空格,即使第二次输入按了回车,也是可以输出'a','b'的;
而且就算不改,得到的结果是c1是换行符,c2既不是a也不是b
另,我用的谭浩强 的《C程序设计》上面scanf函数的示例里面有很多都用了逗号等其他字符来做格式规定的,不知道是不是教材不适合所有编辑器环境?

因为你在第二次输入后回车,导致那个回车符被c1读去了,导致后来你输入的a被认为是",",而","被认为是“b”所以呢,c1输出来的是回车,而在输出c2时,由于你输入的"a"与","不匹配,所以系统“故意”输出个离奇古怪的符号,其实这是在暗示你有地方出错了……
别急,有解决办法,就是在scanf("%c,%c",&c1,&c2);前加一句getchar();这样输出的结果就是你想要的结果了,不信你去试试……

你的c1,c2是从外界读入的
如果你在输完c,d之后不敲回车或空格,直接输入a,b就对了
否则就会把回车或空格读进去

你用F10跟踪一下看看是怎么回事吧

首先,格式控制串中是不用逗号隔开的。
另外这段代码要一次将前三组数字输入输出是可以的。但是当输入单字符时,你两个字符之间需要不加空格进行输入。另外当后一个浮点数后也不要输入空格或回车什么的否则被认为是第一个字符,将被输入a。

在格式控制字符串中除了格式 说明以外还有其它字符则在输入数据时应输入与这些字符相同的字符。在用%C格式输入字符时,空格,逗号和转义字符都作为有效字符输入