| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 678 人关注过本帖
标题:scanf(" %c",&c);和scanf("%c",&c);在程序中的区别? ...
只看楼主 加入收藏
killah
Rank: 2
等 级:论坛游民
帖 子:55
专家分:11
注 册:2013-2-4
结帖率:62.5%
收藏
已结贴  问题点数:20 回复次数:11 
scanf(" %c",&c);和scanf("%c",&c);在程序中的区别?
以下程序实现:有15个数按从小到大的顺序存放在一个数组里,输入一个数,要求用折半查找法找出该数是数组中第几个元素值。如果该数不在数组中,输出“不在表中”。

#include<stdio.h>
void main()
{
    int a[15]={1,3,4,5,6,8,12,23,34,44,45,56,57,58,68};
    int x,i,flag,place,sign,top,bot,mid;
    char c;
    flag=1;
    while(flag)
    {
        printf("input number:");
        scanf("%d",&x);
        sign=0;
        top=0;
        bot=14;
        if(x<a[0]||x>a[14])
            place=-1;
        while(!sign&&top<=bot)
        {
            mid=(top+bot)/2;
            if(x==a[mid])
            {
                place=mid;
                sign=1;
                printf("Has found %d, its position is %d\n",x,place+1);
            }
            else if(x>a[mid])
                top=mid+1;
            else
                bot=mid-1;
        }
        if(place==-1||!sign)
            printf("can not find %d.\n",x);
        printf("Continue ? (Y/N)");
        scanf(" %c",&c);
        if(c=='N'||c=='n')
            flag=0;
    }
}

上面这段程序能正确实现程序功能,但是为什么倒数第五行如果我把scanf(" %c",&c);改成scanf("%c",&c);就不能正常输入c的值呢?
搜索更多相关主题的帖子: include number 元素 
2013-02-24 21:32
a646698961
Rank: 2
等 级:论坛游民
威 望:1
帖 子:49
专家分:94
注 册:2012-12-19
收藏
得分:0 
应该不会吧,那个是不影响的啊?
你可以测试的
程序代码:
#include<stdio.h>
int main()
{
    int x;
    scanf(" %d",&x);
    printf("%d\n",x);
    return 0;
}

没区别

欢迎来讨论和分享经验,QQ:646698961
2013-02-24 21:52
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
试一下就知道

仰望星空...........不忘初心!
2013-02-24 21:54
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:5 
因为你前面 scanf("%d",&x); 时把数字读完了后,输入缓冲中还有一个“回车”,然后被scanf("%c",&c);读入
2013-02-25 09:07
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
收藏
得分:15 
问题三:键盘缓冲区残余信息问题
运行以下程序  
#include <stdio.h>
 void main()
{
     int a;
     char c;
     do
     {
         scanf("%d",&a);
         scanf("%c",&c);
         printf("a=%d c=%c\n",a,c);
         /*printf("c=%d\n",c);*/
     }while(c!='N');
}
  scanf("%c",&c);这句不能正常接收字符,什么原因呢?
我们用printf("c=%d\n",c);将C用int表示出来,启用printf("c=%d\n",c);这一句,
看看scanf()函数赋给C到底是什么,结果是 c=10 ,ASCII值为10是什么?换行即\n.对了,我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n),在这里\r被scanf()函数处理掉了(姑且这么认为吧^_^),而\n被scanf()函数“错误”地赋给了c.  
   解决办法:可以在两个scanf()函数之后加个fflush(stdin);,但是加fflush(stdin);不管什么情况都可行。  
   函数名: fflush  功 能: 清除一个流
 #include <stdio.h>
 void main()
 {
     int a;
     char c;
     do
     {
         scanf("%d",&a);
         fflush(stdin);
         scanf("%c",&c);
         fflush(stdin);
         printf("a=%d c=%c\n",a,c);
     }while(c!='N');
 }  
  用 法: int fflush(FILE *stream);  
  这里再给一个用“空格符”来处理缓冲区残余信息的示例:  
运行出错的程序:
 使用了空格控制符后: #include <stdio.h>  
void main()  
{  int i;
 char j;
 for(i = 0;i < 10;i++)
 {
  scanf(" %c",&j);/*注意这里%前有个空格*/
 }
 }  就可以了
这些是百度来的,关于scanf的用法会讲到这些
2013-02-25 13:24
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
今天晚上起航去学校了.....明天早上到

仰望星空...........不忘初心!
2013-02-25 13:31
killah
Rank: 2
等 级:论坛游民
帖 子:55
专家分:11
注 册:2013-2-4
收藏
得分:0 
回复 4楼 rjsp
这里要避免的回车影响是指前面最开始输入的数字后面的回车是么?
2013-02-25 14:12
killah
Rank: 2
等 级:论坛游民
帖 子:55
专家分:11
注 册:2013-2-4
收藏
得分:0 
回复 5楼 逆风而前
谢谢~讲的很详细,也让我了解到新的消除缓冲区残余信息的方法
2013-02-25 14:13
黑暗烧纸人
Rank: 4
来 自:甘肃
等 级:业余侠客
帖 子:113
专家分:239
注 册:2012-12-22
收藏
得分:0 
飘过~~

老衲闻到一股蛋蛋的忧伤......
2013-02-25 21:33
古剑魂2012
Rank: 2
等 级:论坛游民
帖 子:9
专家分:20
注 册:2013-2-26
收藏
得分:0 
输入格式不一样,前一个要在输入的数之前加上空格,后一个直接输入数即可。望采纳
2013-02-26 16:49
快速回复:scanf(" %c",&c);和scanf("%c",&c);在程序中的区别? ...
数据加载中...
 
   



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

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