| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1564 人关注过本帖
标题:一个看似没错的程序,却有巨大的毛病!
只看楼主 加入收藏
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
结帖率:80%
收藏
 问题点数:0 回复次数:12 
一个看似没错的程序,却有巨大的毛病!
#include"stdio.h"
void main()
{
char c1,c2,c3,c4,c5,a,b,c,d,e;
printf("****BEGIN****\n");
printf("input 5 number\n");
printf("world One:");
scanf("%c",&c1);
printf("\n");
printf("world Tow:");
scanf("%c",&c2);
printf("\n");
printf("world thre:");
scanf("%c",&c3);
printf("\n");
printf("world fore:");
scanf("%c",&c4);
printf("\n");
printf("world five:");
scanf("%c",&c5);
printf("\n");
a=c1+4;
b=c2+4;
c=c3+4;
d=c4+4;
e=c5+4;
printf("%c%c%c%c%c\n",a,b,c,d,e);
printf("****END*****\n");
}
程序能编译出来!
当程序运行完!一共就输入了三次!
one输入了,tow被直接跳过,thre输入第二次,fore又在一次被跳过,five输入第三次!问题大概出在scanf上面!
从程序上看,没什么错,可是运行了,出错!被跳过的总是输出ASCII第14的符号!那问题是怎么会被跳过了呢?
搜索更多相关主题的帖子: printf scanf 毛病 world 
2008-07-12 23:42
yole
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2008-7-10
收藏
得分:0 
我试了,确实有问题。。。

不知道是怎么回事


高手来看看~
2008-07-13 00:32
xxwpk007
Rank: 4
等 级:业余侠客
帖 子:166
专家分:289
注 册:2007-7-29
收藏
得分:0 
第一个scanf输入后缓冲区有残留,如果只输入一个字符就是'\n'
所以第二个scanf会接着读取缓冲区中的数据
如果缓冲区残留的数据多的话,如输入:ffff
就会跳过5个scanf

要清除缓冲区的数据

#include"stdio.h"
void main()
{
    char ch;
    char c1,c2,c3,c4,c5,a,b,c,d,e;
    printf("****BEGIN****\n");
    printf("input 5 number\n");
    printf("world One:");
    scanf("%c",&c1);
    while((ch = getchar()) != '\n')
        continue;
    printf("\n");
    printf("world Tow:");
    scanf("%c",&c2);
    while((ch = getchar()) != '\n')
        continue;
    printf("\n");
    printf("world thre:");
    scanf("%c",&c3);
    while((ch = getchar()) != '\n')
        continue;
    printf("\n");
    printf("world fore:");
    scanf("%c",&c4);
    while((ch = getchar()) != '\n')
        continue;
    printf("\n");
    printf("world five:");
    scanf("%c",&c5);
    while((ch = getchar()) != '\n')
        continue;
    printf("\n");
    a=c1+4;
    b=c2+4;
    c=c3+4;
    d=c4+4;
    e=c5+4;
    printf("%c%c%c%c%c\n",a,b,c,d,e);
    printf("****END*****\n");
}

[[it] 本帖最后由 xxwpk007 于 2008-7-13 01:08 编辑 [/it]]
2008-07-13 01:04
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
哦,问题就出在缓冲区上!了解了!谢谢啊!

编程小菜
2008-07-13 01:33
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
巨大的毛病是楼主还在使用void main

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2008-07-13 08:57
hangeng
Rank: 2
等 级:论坛游民
帖 子:424
专家分:39
注 册:2007-7-23
收藏
得分:0 
支持孔明!

  雨水冲不进窗来,在玻璃上痛哭。但它至少奋斗过。
2008-07-13 10:00
yole
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2008-7-10
收藏
得分:0 
[bo][un]卧龙孔明[/un] 在 2008-7-13 08:57 的发言:[/bo]

巨大的毛病是楼主还在使用void main


用int main(void){…return 0…}?


二者有何区别?
2008-07-13 12:42
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
那请问下那使用什么呢?谢谢!

编程小菜
2008-07-13 13:13
weagle
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-7-5
收藏
得分:0 
VC中可以使用fflush函数输入清空流:
int i;
char s;
scanf(“%s”, &s);   
fflush(stdin);      // 舍弃原先多余的字符
scanf(“%d”, &i);
2008-07-13 22:30
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分:0 
没有什么区别。。只不过一个是标准的用法。一般Windows/DOS下不会爆什么bug的

Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-07-13 22:47
快速回复:一个看似没错的程序,却有巨大的毛病!
数据加载中...
 
   



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

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