当前位置: 代码迷 >> C语言 >> [求助]使用scanf时,char型的正确输入方法应该是如何?
  详细解决方案

[求助]使用scanf时,char型的正确输入方法应该是如何?

热度:133   发布时间:2007-09-19 10:50:41.0
[求助]使用scanf时,char型的正确输入方法应该是如何?

首先是第一段代码

#include<stdio.h>
#include<stdlib.h>
main()
{
char c1,c2;
scanf("%c,%c",&c1,&c2);
printf("c1='%c',c2='%c'\n",c1,c2);
system("pause");
}

建立c1,c2为字符型变量,输入c1,c2的值后输出c1,c2。
输入:
a,b
输出:
c1='a',c2='b'
以上没有问题。
然后我修改了一下代码
#include<stdio.h>
#include<stdlib.h>
main()
{
int a,b;
char c1,c2;
scanf("%d,%d",&a,&b);
scanf("%c,%c",&c1,&c2);
printf("c1='%c',c2='%c'\n",c1,c2);
system("pause");
}
建立了两个整型变量 a,b。并先用scanf输入a,b的值。然后再输入c1,c2的值。
输入:
12,34
a,b
输出:
c1='
',c2='f'
出问题了……这应该是程序把换行符\n当成了c1的值。我刚开始以为这里应该断开一下,于是又改了下代码。
#include<stdio.h>
#include<stdlib.h>
main()
{
int a,b;
char c1,c2;
scanf("%d,%d",&a,&b);
printf("1\n");
scanf("%c,%c",&c1,&c2);
printf("c1='%c',c2='%c'\n",c1,c2);
system("pause");
}
在输入a,b的值后,让它先输出个1,然后再输入c1,c2。
输入:
12,34
(输出1)
a,b
输出:
c1='
',c2='f'
依然如旧……
于是我用了第二个程序,不过改变了一下输入方法。
输入:
12,34a,b
输出:
c1='a',c2='b'

以上。

我的问题是,要如何写代码才能保证在不出错的情况下将a,b的值和c1,c2的值分为两行输入?
编辑器是dev c++

[此贴子已经被作者于2007-9-19 10:52:14编辑过]

搜索更多相关的解决方案: char  scanf  输入  

----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b;
char c1,c2;
scanf("%d,%d",&a,&b);
getchar();
scanf("%c,%c",&c1,&c2);
printf("c1='%c',c2='%c'\n",c1,c2);
system("pause");
return 0;
}

你还说你用的是DEVCPP```没有int main和return 0;```你能通过编译???


----------------解决方案--------------------------------------------------------
c2 为什么是f呢````



----------------解决方案--------------------------------------------------------
我也用DEVCPP```但是``C2是' '里面应该是空字符'\0'```不是f````

[此贴子已经被作者于2007-9-19 11:19:33编辑过]


----------------解决方案--------------------------------------------------------
以下是引用死了都要C在2007-9-19 11:07:18的发言:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b;
char c1,c2;
scanf("%d,%d",&a,&b);
getchar();
scanf("%c,%c",&c1,&c2);
printf("c1='%c',c2='%c'\n",c1,c2);
system("pause");
return 0;
}

你还说你用的是DEVCPP```没有int main和return 0;```你能通过编译???


话说……我还真通过编译了…… dev-c++ version4.9.9.2,可能是我的设置有问题?

你的代码中的函数前的声明和后面的return是标准结构吧?也就是说每个函数都需要带的东西?恩恩,我以后写的时候会注意这点的,多谢多谢。

那里除了getchar和直接赋值外还有没有其他的处理方法?

另外,你的c2也是f?


----------------解决方案--------------------------------------------------------
以下是引用死了都要C在2007-9-19 11:16:55的发言:
我也用DEVCPP```但是``C2是' '里面应该是空字符'\0'```不是f````


关于那里我也很奇怪,正常来讲c2应该是空啊,但是它输出的显示确实是f。搞不清楚是那里的问题。貌似定义c2时它就是f了。
输入:
12,34回车
回车
输出:
c1='
',c2='f'

[此贴子已经被作者于2007-9-19 11:34:04编辑过]


----------------解决方案--------------------------------------------------------
你们扯了这么多还没接触真正的问题。
可以在读字符前加一条语句清空缓冲区中的垃圾,见下例:
while(getchar()!='\n');
scanf("%c,%c",&c1,&c2);

至于这种形式的main函数是C最新标准规定的
int main()
{
// add your code here
return 0;
}

----------------解决方案--------------------------------------------------------
多谢,又学会了一种方法。

如你所述,这是缓冲区中的垃圾造成的问题,那么也就是说在每次输入char或s[]前都要这么做一次了?
----------------解决方案--------------------------------------------------------

有垃圾你就清,没有你清什么?


----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
main()
{
int a,b;
char c1,c2;
scanf("%d,%d",&a,&b);
scanf(" %c,%c",&c1,&c2);//第一个%c前面加上一个空格就可以了
printf("c1='%c',c2='%c'\n",c1,c2);
system("pause");
}
----------------解决方案--------------------------------------------------------
  相关解决方案