| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 851 人关注过本帖
标题:求救,输出问题~~
取消只看楼主 加入收藏
q7q8q7
Rank: 1
来 自:河工大
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-9-30
收藏
 问题点数:0 回复次数:3 
求救,输出问题~~
很郁闷的啊,找不到那里出问题了,程序长了点,主要是为了练习格式,帮忙看下哈。
#include <stdio.h>
int n,num;
char a[10],x;
void sort(char a[],int n)
{
    int i,j,k;
    char t;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(a[k]<a[j])k=j;
            if(k!=i)
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
    }
}
void search(char a[],int n,char x)
{
    int left=0,right=n-1,mid,flag=0;
    if(n>2)
        while((flag==0)&&(right>left))
        {
            mid=(left+right)/2;
            if(x==a[mid])
            {
                flag=1;
                num=mid;
            }
            else if(x<a[mid])right=mid-1;
            else left=mid+1;
        }
    else num=(a[1]>a[2])?1:2;
}
void input(char a[])
{
    int i;
    printf("please input the quantity of students!\n(Quantity must smaller than 11 and biger than 1):");
    scanf("%d",&n);
    while((n<=1)||(n>=11))
    {
        printf("please input the right one:");
        scanf("%d",&n);
    }
    printf("\nplease input the code of students:\n");
    for(i=0;i<n;i++)
    {
        printf("student_%d:",i+1);
        scanf("%c",&a[i]);
        printf("\n")

    }
    printf("now,the queue is:");
    for(i=0;i<n;i++)
        printf("%5c",a[i]);
    printf("\n");
    printf("please input the element of you want to search:");
    scanf("%c",&x);
}
void output1(char a[])
{
    int i;
    printf("we can get the orderly queue:\n");
    for(i=0;i<n;i++)
        printf("%5c",a[i]);
    printf("\n");
}
void output2(char a[])
{
    printf("the element you search at the %d of queue.\n",num);
    printf("\n        thanks for your test,Bye-bye (*^__^*) \n");
}
void main()
{
    input(a);
    sort(a,n);
    output1(a);
    search(a,n,x);
    output2(a);
}


在运行input函数,读入数组a时,总是直接跳了一个存储区,如:输入N为2,屏幕会打印出   
please input the code of students:
student_1:
student_2:
student_1没读入,直接跳到了student_2,然后读入了一个字符就结束了,我看了半天不明白,谁能帮我看下啊,谢谢了。
搜索更多相关主题的帖子: 函数 输出格式 循环 形参 
2008-10-14 21:50
q7q8q7
Rank: 1
来 自:河工大
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-9-30
收藏
得分:0 
没人帮忙看下么,虽然长了点,但只是输出问题啦,不用全部看啊,谢谢了
2008-10-14 22:06
q7q8q7
Rank: 1
来 自:河工大
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-9-30
收藏
得分:0 
恩,有点长+本人很迷糊,现在就去看,总结什么的明天一定补上,先谢谢楼上的了,呵呵
2008-10-14 22:59
q7q8q7
Rank: 1
来 自:河工大
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-9-30
收藏
得分:0 
我的程序本身还有些逻辑上的错误,我会调过来的,先说说那个什么键盘缓存区的东东吧。

使用SCANF()函数给一个字符变量赋值时,当第一次调用SCANF()函数时,程序   
等待输入,但是第二次调用时,程序并未等待输入,而是将第一次输入确认时的回车符   
直接赋给变量。有文章说是因为SCANF()函数直接读取键盘缓冲区的缘故。

这是因为第一次调用SCANF时在键盘缓存中留下了一个"回车".   
 要避免只需再第二次之前调用getchar()将"回车"读进来,也就   
 相当于清除键盘缓冲了。
也就是楼上定义的“Y” 函数了。

想要更深的了解键盘缓冲区等问题的话,不妨在网上多看看,如fflush()函数。
fflush()函数的功能就是刷新缓冲区,加上stdin参数,就是刷新标准输入流,默认情况下,也就是你的键盘输入。

不说了,很多东西我都无法把它们之间的关系搞明白,如果各位大侠又什么想法不妨说下,相信还是有很多人对这块
了解的不多,也算是帮助理解下了哈。

明天早上还要跑操~~先闪人了……
收到的鲜花
  • liyanhong2008-10-15 00:02 送鲜花  45朵   附言:好文章
2008-10-15 00:00
快速回复:求救,输出问题~~
数据加载中...
 
   



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

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