注册 登录
编程论坛 C++教室

新人求指点

lilinyi 发布于 2010-07-01 19:23, 596 次点击
有如下程序:

#include<stdio.h>
void main()
{
    char c;
    int a,b,flag=1;
    while(flag)
    {
        printf("请输入a的值:\n");
        scanf("%d",&a);
        printf("请输入b的值:\n");
        scanf("%d",&b);
        printf("%5d,%5d\n",a,b);
        printf("continue?(Y/N)");
        scanf(" %c",&c);
        if(c=='n'||c=='N')
            flag=0;
    }
}
请问为啥第14行“scanf(" %d",c);”中需要加个空格呢?没有空格就会出错是为什么呢?自己没想明白,求大家指点迷津,谢谢了!

[ 本帖最后由 lilinyi 于 2010-7-1 19:24 编辑 ]
4 回复
#2
方廷2010-07-01 21:03
scanf(" %c",&c);
可以这样写:
getchar();//吃掉上次输入时的回车字符
scanf("%c",&c);
因为在输入字符之前有别的参数输入时,我们会按回车键确认,就有一个回车字符产生;
这时的scanf("%c",&c);会自动接收回车字符;



#3
南国利剑2010-07-02 11:10
这个的原因如楼上所说,回车键会被当做一个字符被c接收,
解决的方法有很多。
可以在输入的格式控制前面加上一个‘\n’或者‘ ’,都可以。
也可以在输入语句之前加上,getchar()或者getch();
#4
lilinyi2010-07-02 19:02
哦,那如果c定义为整形数据,就不需要了吧?还有那加了一个空格后,是不是就因为回车符的位置在空格那儿了,所以输入函数就对了是吗?那如果加了两个空格的话,是不是输入的时候得先输个空格符呢?

[ 本帖最后由 lilinyi 于 2010-7-2 19:05 编辑 ]
#5
南国利剑2010-07-03 03:16
回复 4楼 lilinyi
不是的,加两个空格的效果跟加一个空格的效果是一样的。
1