鱼C论坛

 找回密码
 立即注册
查看: 6661|回复: 23

冒泡排序的一个小问题

[复制链接]
发表于 2013-3-30 11:37:32 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 权志龙_爱死你la 于 2013-3-30 11:40 编辑

今天在运行冒泡法排序的程序时 在输入块有个小问题        for(i=0;i<10;i++)
        {
                scanf("%d",&a[i]);
        }
刚开始 我在%d后面面加了一个空格 在运行时  输入了十个int数字 回车确不能输出结果 我试着又随便输入十个 回车就输出了我原本要排序的十个数字的排序结果 我以为是因为%d后面的空格数  所以试着%d后面又多加一个空格 运行时 还是只要多输入十个数字就可以把要排序的数字排序出来了 不管%d后面由几个空格  最后我就把%d后面的空格全部去掉 才能正常运行 这是什么原因?我就不明白 为什么%d后面加了N个空格后在运行的时候就要多输入十个数……我这算钻牛角尖吗?真的想明白是咋回事

对了 源代码是:
#include<stdio.h>
#include<stdlib.h>
void main()
{
        int i,j,max,a[10];
        printf("please input all of numbers:\n");
        for(i=0;i<10;i++)
        {
                scanf("%d ",&a[i]);
        }
        for(j=10;j>0;j--)
        {
                for(i=1;i<j;i++)
                {
                        if(a[i-1]>a[i])
                        {
                                max=a[i-1];
                                a[i-1]=a[i];
                                a[i]=max;
                        }

                }
        }
        printf("please output all of numbers in decrease:\n");
        for(i=0;i<10;i++)
        {
                printf("%d\n",a);
        }
        system("pause");
}

[/i][/i][/i][/i][/i]

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-30 12:50:27 | 显示全部楼层
sancf() 函数是格式输入函数,除了格式控制符外,如果有其他字符(包括空格,逗号等)要按照原样输入。
例如 scanf("%d ");  %d后面有一个空格,于是在输入数据的时候,空格也要输入,像 "45(空格)" 这样才是完整的输入格式。
又如scanf("%d,");   %d后面有一个逗号,于是在输入数据的时候,都好也要输入,像 "33,"这样才是完整的输入格式。
如果你没有输入完整的格式,那么后面的数据就会被覆盖掉,造成错误。一般对于初学者来说,是一种常犯的错误。有经验的人会在scanf前面使用printf()来提醒用户输入数据的格式,而且 saanf()语句的双引号里面,一般都只有格式控制符,这样可以减少出错的机会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-30 12:50:51 | 显示全部楼层
数组应该是scanf("%d ",&a[i]);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-30 21:02:09 | 显示全部楼层
怎么是斜体
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-31 16:15:17 | 显示全部楼层
我也想知道答案哈哈哈哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-31 18:56:22 | 显示全部楼层
本帖最后由 故乡的风 于 2013-3-31 19:06 编辑

以后发代码的时候,建议使用代码框,[i]估计是斜体字的标签,你贴的代码[i]都没了,我开始还以为你的代码错的呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-31 23:30:38 | 显示全部楼层

嗯 下次会注意……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-31 23:32:59 | 显示全部楼层
小靚同学Leon 发表于 2013-3-31 16:15
我也想知道答案哈哈哈哈哈哈

我找到答案了
1.空白符问题
#include<stdio.h>
main()
{   
int a;
printf("input the data\n");
scanf("%d\n",&a);//这里多了一个回车符\n
    printf("%d",a);
return 0;
}
结果要输入两个数程序才结束,而不是预期的一个。why?
原因:用空白符结尾时,scanf会跳过空白符去读下一个字符,所以你必须再输入一个数。这里的空白符包括空格,制表符,换行符,回车符和换页符。所以如果你用scanf("%d   ",&a)也会出现同样的问题。
解决方法:这种错误大多是输入的时候不小心,多注意一点就好了。这种问题也不好检查,编译没有问题,一个空格也不容易看出来。当你的程序出现上面的问题时,自己对照检查一下就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-31 23:33:35 | 显示全部楼层
wangyexin 发表于 2013-3-30 12:50
数组应该是scanf("%d ",&a);

我自己找到答案了
1.空白符问题
#include<stdio.h>
main()
{   
int a;
printf("input the data\n");
scanf("%d\n",&a);//这里多了一个回车符\n
    printf("%d",a);
return 0;
}
结果要输入两个数程序才结束,而不是预期的一个。why?
原因:用空白符结尾时,scanf会跳过空白符去读下一个字符,所以你必须再输入一个数。这里的空白符包括空格,制表符,换行符,回车符和换页符。所以如果你用scanf("%d   ",&a)也会出现同样的问题。
解决方法:这种错误大多是输入的时候不小心,多注意一点就好了。这种问题也不好检查,编译没有问题,一个空格也不容易看出来。当你的程序出现上面的问题时,自己对照检查一下就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-31 23:34:13 | 显示全部楼层
L]V[G 发表于 2013-3-30 12:50
sancf() 函数是格式输入函数,除了格式控制符外,如果有其他字符(包括空格,逗号等)要按照原样输入。
例如 ...

我自己找到 答案 跟你的有点出入 你看一下
1.空白符问题
#include<stdio.h>
main()
{   
int a;
printf("input the data\n");
scanf("%d\n",&a);//这里多了一个回车符\n
    printf("%d",a);
return 0;
}
结果要输入两个数程序才结束,而不是预期的一个。why?
原因:用空白符结尾时,scanf会跳过空白符去读下一个字符,所以你必须再输入一个数。这里的空白符包括空格,制表符,换行符,回车符和换页符。所以如果你用scanf("%d   ",&a)也会出现同样的问题。
解决方法:这种错误大多是输入的时候不小心,多注意一点就好了。这种问题也不好检查,编译没有问题,一个空格也不容易看出来。当你的程序出现上面的问题时,自己对照检查一下就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-7 23:19:13 | 显示全部楼层
友情帮顶~   即使我不会~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-7 23:23:37 | 显示全部楼层
祝好运~           
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-15 18:27:48 | 显示全部楼层
   for(i=0;i<10;i++)
        {
                scanf("%d ",&a);
        }
楼主这段代码 每回都只是给 数组第一个数赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-16 16:53:09 | 显示全部楼层

那个 是我发帖时的输入错误啦  呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-30 23:06:24 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
void main()
{
         int i,j,max,a[10],c;
         printf("please input all of numbers:\n");
         for(i=0;i<10;i++)
         {
                         if(i==9)
                         {
                                scanf("%d",&a[9]);
                                break;
                         }
                         
                           scanf("%d ",&a[i]);
                 }
               
         for(j=10;j>0;j--)
         {
                 for(i=1;i<j;i++)
                 {
                         if(a[i-1]>a[i])
                         {
                                 max=a[i-1];
                                 a[i-1]=a[i];
                                 a[i]=max;
                         }

                }
         }
                 
         printf("please output all of numbers in decrease:\n");
         for(i=0;i<10;i++)
         {
                 printf("%d\n",a[i]);
         }
         system("pause");
}
不好意思解决不了你的问题,scanf()函数好像不太好终止
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-5 17:17:09 | 显示全部楼层
真是难得给力的帖子啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-8 20:44:00 | 显示全部楼层
我只是路过打酱油的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-20 21:17:06 | 显示全部楼层
路过!!!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-18 16:55:21 | 显示全部楼层
我是来领鱼币的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-21 15:38:21 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 13:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表