| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 885 人关注过本帖
标题:c语言自己的程序怎么只能运行前半段?
只看楼主 加入收藏
a18300766880
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-4-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
c语言自己的程序怎么只能运行前半段?
题目:输入10个数,然后根据提示输入A或D,输入A就按从小到大输出这10个数,输入D则从大到小输出者10个数
#include<stdio.h>
void main()
{
    int a[10],i,t,j;
    char op;
    printf("enter 10 number:");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    for(j=1;j<9;j++)
        for(i=0;i<10-j;i++)
            if(a[i]>a[i+1]){
               t=a[i];
               a[i]=a[i+1];
               a[i+1]=t;
            }
    printf("enter A or D:");
    op=getchar();
    switch(op){
    case'A':
        for(i=0;i<10;i++)
            printf("%d ",a[i]);
        break;
    case'D':
        for(i=9;i>=0;i--)
            printf("%d ",a[i]);
        break;
    }
    printf("\n");
}
为什么运行的时候只运行到printf("enter A or D:");就结束了?
搜索更多相关主题的帖子: include number 
2013-04-26 21:17
Dream_ease
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-8-25
收藏
得分:0 
subject
message
2013-04-26 21:41
SKYYYF
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:71
专家分:184
注 册:2012-9-23
收藏
得分:0 
getchar()能把  回车键  当作一个  回车符  读入。你运行到  printf("enter A or D:");  后就结束,应该是输完数字以后按了一下回车键的缘故。
此时  getchar()获得 回车符 ,将回车符保存在  字符  Op  中 ,由于 回车符 与 ‘A’ 和  ‘D’  都不相同,所以没有执行 switch()语句。
如果想要得到正确的结果,你不妨输完数字以后直接输入  A 或者  D(最后一个数字与字母之间不要有任何字符),然后就能得到正确的结果了。
2013-04-26 22:25
犿蚂
Rank: 2
等 级:论坛游民
帖 子:29
专家分:23
注 册:2013-4-24
收藏
得分:0 
哎呀!我错了,老师今天讲到了这个问题。要在op=getchar()前面加个getchar()。否则系统就会默认op=getchar()的值为Enter

[ 本帖最后由 犿蚂 于 2013-4-27 15:12 编辑 ]
2013-04-26 22:26
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:8 
这样就好了,其实我当时也没想到,我也查了很多资料,这个知识点我忘了,就是scanf函数的输入缓存问题,程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,
#include<stdio.h>
int main()
{
    int a[10],i,t,j;
    char op;
    printf("enter 10 number:");   
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    fflush(stdin);       //清除缓冲
    for(j=1;j<9;j++)
        for(i=0;i<10-j;i++)
            if(a[i]>a[i+1]){
               t=a[i];
               a[i]=a[i+1];
               a[i+1]=t;
            }
    printf("enter A or D:");
    op=getchar();
    switch(op){
    case'A':
        for(i=0;i<10;i++)
            printf("%d ",a[i]);
        break;
    case'D':
        for(i=9;i>=0;i--)
            printf("%d ",a[i]);
        break;
    }
    printf("\n");
    return 0;
}

Maybe
2013-04-26 22:27
P40714107
Rank: 1
等 级:新手上路
帖 子:4
专家分:5
注 册:2012-12-25
收藏
得分:0 
#include<stdio.h>
void main()
{
    int a[10],i,t,j;
    char op;
    printf("enter 10 number:");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    for(j=1;j<9;j++)
        for(i=0;i<10-j;i++)
            if(a[i]>a[i+1]){
               t=a[i];
               a[i]=a[i+1];
               a[i+1]=t;
            }
    printf("enter A or D:");
    op=getchar();//读回车字符
    op=getchar();//才是A or B
    switch(op){
    case'A':
        for(i=0;i<10;i++)
            printf("%d ",a[i]);
        break;
    case'D':
        for(i=9;i>=0;i--)
            printf("%d ",a[i]);
        break;
    }
    printf("\n");
}
2013-04-26 22:29
徐晓飞
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-4-26
收藏
得分:0 
这样也是可以滴:
#include<stdio.h>
void main()
{
    int a[10],i,t,j;
    char op;
    printf("enter 10 number:");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    for(j=1;j<9;j++)
        for(i=0;i<10-j;i++)
            if(a[i]>a[i+1]){
               t=a[i];
               a[i]=a[i+1];
               a[i+1]=t;
            }
    printf("enter A or D:");
    scanf("%s",&op);
    switch(op){
    case'A':
        for(i=0;i<10;i++)
            printf("%d ",a[i]);
        break;
    case'D':
        for(i=9;i>=0;i--)
            printf("%d ",a[i]);
        break;
    }
    printf("\n");
}

[ 本帖最后由 徐晓飞 于 2013-4-26 22:52 编辑 ]
2013-04-26 22:49
鈴蘭
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:48
专家分:145
注 册:2013-4-1
收藏
得分:2 
楼上正解,用c%也不可以哦

菜鸟一枚,回复如有错误,还望谅解!
2013-04-26 23:12
a18300766880
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-4-26
收藏
得分:0 
回复 3楼 SKYYYF
但是不是应该运行过到printf()后才能运行getchar()语句吗?
那应该是屏幕就显示了什么 之后再getchar才对啊?
可以给个详细解答吗?
2013-04-27 19:48
SKYYYF
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:71
专家分:184
注 册:2012-9-23
收藏
得分:10 
回复 9楼 a18300766880
你在输入数据时,数据先进入计算机的缓冲区。
例如,在输入“1 2 3 4 5 6 7 8 9 10<回车>”(不包括双引号)时,这些数据存放在缓冲区。
执行scanf("%d",&a[i]);语句时,从缓冲区依次读取数据放在a[0]到a[10]所在的内存空间。
虽然 op=getchar() 语句在  printf("enter A or D:");之后,但是由于 <回车> 在缓冲区存放着,
并且getchar()能够将回车符作为一个字符读入,又 op 属于 char 型变量, 所以  op读取 缓冲区 的内容。
因此虽然你在输入数字的时候输入了一个回车,但是这个回车在执行过printf("enter A or D:");语句后,
已经存入了Op所代表的内存空间。所以不再执行switch()语句,直接结束。
给你一个例子,好好体会一下  getchar() 这个语句的特点。
#include <stdio.h>
void main()
{ int a,b;
  char c,d;
  scanf("%d%c%d",&a,&c,&b);   
  /* 第一次输入  1<回车>x<回车>    ,第二次输入  1<回车>2y<回车>  */
  /* 比较下两次运行的结果 */
  printf("a=%d,c=%c,b=%d\n",a,c,b);
  d=getchar();
  printf("d=%c\n",d);
}
2013-04-29 12:03
快速回复:c语言自己的程序怎么只能运行前半段?
数据加载中...
 
   



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

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