| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10559 人关注过本帖
标题:[求助]使用scanf时,char型的正确输入方法应该是如何?
只看楼主 加入收藏
lg_mic
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-9-18
收藏
 问题点数:0 回复次数:11 
[求助]使用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 输入 
2007-09-19 10:50
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
#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;```你能通过编译???


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-09-19 11:07
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
c2 为什么是f呢````



女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-09-19 11:12
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
我也用DEVCPP```但是``C2是' '里面应该是空字符'\0'```不是f````

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


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-09-19 11:16
lg_mic
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-9-18
收藏
得分:0 
以下是引用死了都要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?


2007-09-19 11:27
lg_mic
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-9-18
收藏
得分:0 
以下是引用死了都要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编辑过]


2007-09-19 11:30
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 
你们扯了这么多还没接触真正的问题。
可以在读字符前加一条语句清空缓冲区中的垃圾,见下例:
while(getchar()!='\n');
scanf("%c,%c",&c1,&c2);

至于这种形式的main函数是C最新标准规定的
int main()
{
// add your code here
return 0;
}
2007-09-19 11:34
lg_mic
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-9-18
收藏
得分:0 
多谢,又学会了一种方法。

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

2007-09-19 11:51
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 

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

2007-09-19 11:53
myblueheart
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-1-22
收藏
得分:0 
#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");
}
2008-01-22 16:53
快速回复:[求助]使用scanf时,char型的正确输入方法应该是如何?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017123 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved