新手求助一个问题 谢谢大家了

zy86416779 2012-10-01 06:50:56
这个程序要求读入数字字符(‘0’-‘9’),并把其转换为相应的整数后显示出来,如果不是数字字符继续输入。我遇到的问题是在scanf之前加了一个printf函数显示Please input char,但是问题是如果输入不是字符却总是出现两个Please input char这个显示字符窜。希望大家帮我看看。谢谢大家。

#include <stdio.h>
void main()
{
char a;
while(1)
{
printf("Please input char\n");
scanf("%c",&a);
if(a<='9'&&a>='0')
break;
}
a-='0';
printf("%d\n",a);
}
...全文
106 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
armsword 2012-10-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

我还是没太懂 为什么算是循环两次 不得是回车才算是字符输入结束引用 2 楼 的回复:
C/C++ code
#include <stdio.h>
void main()
{
char a;
while(1)
{
printf("Please input char\n");
scanf("%c",&amp;a);
getchar();
if(a<='9'&a……
[/Quote]

The scanf function reads data from the standard input stream stdin 。

比如你输入a,之后回车,a 和回车键都在stdin中。之后判断if,第一次不对,循环一次,enter继续判断一次,之后会输入2此printf内容。如果想消除影响,可以用ffush清除文件缓冲区。
zy86416779 2012-10-01
  • 打赏
  • 举报
回复
我还是没太懂 为什么算是循环两次 不得是回车才算是字符输入结束[Quote=引用 2 楼 的回复:]
C/C++ code
#include <stdio.h>
void main()
{
char a;
while(1)
{
printf("Please input char\n");
scanf("%c",&a);
getchar();
if(a<='9'&&a>='0')
break;
}
a-='0';
printf("%d\n",a);
}
楼上正……
[/Quote]
0xAC 2012-10-01
  • 打赏
  • 举报
回复
把回车吃掉!
卖萌de猫 2012-10-01
  • 打赏
  • 举报
回复
#include <stdio.h>
void main()
{
char a;
while(1)
{
printf("Please input char\n");
scanf("%c",&a);
getchar();
if(a<='9'&&a>='0')
break;
}
a-='0';
printf("%d\n",a);
}
楼上正解,我是这样改的。理由就是你接受输入是按照字符接受的,但是按回车符也是输入了一个字符(\n),所以多循环了一次。
Gloveing 2012-10-01
  • 打赏
  • 举报
回复
scanf("%c",&a);
fflush(stdin);

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧