C语言scanf 输入帮我看看错在哪里

int a,b;
float x,y;
char c1,c2;
scanf("a=%d b=%d",&a,&b);
scanf("x=%lf y=%lf",&x,&y);
scanf("c1=%c c2=%c",&c1,&c2);
printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c",a,b,x,y,c1,c2);
程序是上面这个,如何正确输入使变量a=3,b=7,x=8.5 y=71.82 c1='A',c2='a'

我打算这样输入,但是第一个回车后程序就直接结束了,问题出在哪里?
a=3 b=3<回车>x=8.5 y=71.82c1='A' c2='a'<回车?
请问这样输入为什么得不到正确结果
如果不输入回车a=3 b=3x=8.5 y=71.82c1='A' c2='a'<回车>也得不到正确结果
请问这两个输入分别错在哪里,正确输入是什么

主要就是输入的回车要处理一下,代码如下:
#include<stdio.h>
int main()
{
int a,b;
float x,y;
char c1,c2;
scanf("a=%d b=%d",&a,&b);
getchar(); // 读取回车
scanf("x=%f y=%f",&x,&y); // float用%f
getchar(); // 读取回车
scanf("c1=%c c2=%c",&c1,&c2);
printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c",a,b,x,y,c1,c2);
return 0;
}
正确输入是
a=1 b=2(回车)
x=8.5 y=71.82(回车)
c1=a c2=A(回车)
就可以了。追问

问一下为什么一个回车会导致程序的结束?

追答

scanf去%c的时候回车是会被当做字符处理的(ASCII值为10好像),所以要对回车进行处理。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-23
1,输入不能格式化,去掉a=,b=等
scanf("%d,%d",&a,&b);//(回车)
scanf("%f,%f",&x,&y));//(回车)
scanf("%c,%c",&c1,&c2));//(回车)
输出可以格式化输出,
自己回去好好看书吧,你需要补得知识蛮多的追问

a=,b=无需去掉的也能得到正确结果的,,程序错在scanf("x=%lf,y=%lf,&x,&y);

第2个回答  2012-12-23
第一个问题是因为当你第一次输入回车时,scanf函数遇见回车就终止了,所以结束输入
第二个问题没看出来
第3个回答  2012-12-23
你没有清空缓存:在scanf前面加fflush(stdin).追问

有办法在不清空缓存区的情况下得到正确的输入码
为什么一个回车就会导致程序的结束

追答

看这个吧
http://zhidao.baidu.com/question/369228772.html
你在网上搜一搜也行,我表达能力不大好……你有什么问题我能把你解决但我不一定能说出来具体怎么回事。

C语言scanf 输入帮我看看错在哪里
int a,b;float x,y;char c1,c2;scanf("a=%d b=%d",&a,&b);getchar(); \/\/ 读取回车 scanf("x=%f y=%f",&x,&y); \/\/ float用%f getchar(); \/\/ 读取回车 scanf("c1=%c c2=%c",&c1,&c2);printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c",a,b,x,y,c1,c2);retu...

C语言:完数 帮我看下我错哪里了!!不需要复制的答案
include <stdio.h>int i=0;\/\/1000 int j=0;\/\/除数 int N=0,temp=0,x=0,y=0,count=0; int a[100];int main(){scanf("%d",&N); for(i=1;i<=N;i++){for(j=1,x=0,temp=0;j<i;j++){\/\/<===if(i%j==0){a[x]=j;x++;temp+=j;}}\/\/<===if(temp==i){pr...

C语言简单程序,帮看看哪错了
输入一个实数那行有个引号用了中文符,应该改为英文符;最后输出-a那段语句后面没有写“;”;定义变量a时为双精度浮点数,而输入时存为了单精度浮点数,存在溢出故障,会导致运行错误,见下图:应该改为如下 include<stdio.h> main(){ double a;printf("请输入一个实数:");scanf("%lf",&a);...

c语言 scanf用法错误
break;default: printf("错误\\n");break;} } 在第一个SCANF和第二个SCANF之间加个getchar即可,因为输入a,b时,要按回车键,第二个SCANF就输入了回车,加了个getchar就把回车给吸收掉了

C语言 ,求 a的b次方, 求大神看看错在哪里???\/
我给你个参考程序吧。include<stdio.h> void main(){ int a,b,i;scanf("%d d",&a,&b);i=1;\/\/原程序中你把i=a;一进入while逻辑算法就错了 while(b);\/\/原程序中while(b>1);就算你之前的逻辑算法是对的,也只能得到a^(b-1)的值,因为漏了b=1这次 { i*=a;b-=1;} printf("...

我做的C语言题目感觉做错了,用scanf函数表达,错哪里了,大家指出_百度...
逻辑错误 你已经给ab赋值了 SCANF是键盘输入数值给a b赋值 试试这个 #include<stdio.h> void main(){int a,b,c;scanf("%d%d",&a,&b); \/输入ab的值 \/ c=a+b;printf("%d,%d,%d",a,b,c);}

c语言练习题,看下哪里有错误
scanf(“%ld,%ld”,e,f);\/\/错误三 scanf(“%o,%o”,u,v);\/\/错误四 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(“e=17ld,f=...

C语言数组编程 帮我看看哪里错了
这是在你的基础上改写程序:include <iostream>\/\/cout的头文件是"iostream"include <stdio.h>\/\/scanf的头文件是"stdio.h"using namespace std;void main(){ int i,max,min,pos_max,pos_min,a[10];cout<<"请输入十个元素:"<<endl;for(i=0;i<10;i++)\/\/输入数组a的元素 scanf("%d",...

...看看我写的错在哪里啊,如果完全不对还望哪位高人给出答案啊_百度知...
h> int main (void){ int nian;printf("请输入要判断的年份:");scanf("%d",&nian);if((nian%4==0&&nian%100!=0)||(nian%400==0)) \/\/输入的年份能被4整除,但不能被100整除,或者能被400整除。{ printf("%d是闰年。\\n",nian);} else printf("%d不是闰年。\\n",nian);} ...

C语言用scanf输入字符输出确实错误的。。。
朋友,你没有加输入分隔符,空格,逗号都可以,你加上试试如果有其他错再说。这是最明显的错误(就是scanf中%c中间加)我用的是TC,都是C语言,应该是一样的,希望能够帮助到你,注意在输入的时候也要用逗号隔开

相似回答
大家正在搜