权志龙_爱死你la 发表于 2013-3-30 11:37:32

冒泡排序的一个小问题

本帖最后由 权志龙_爱死你la 于 2013-3-30 11:40 编辑

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

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

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

L]V[G 发表于 2013-3-30 12:50:27

sancf() 函数是格式输入函数,除了格式控制符外,如果有其他字符(包括空格,逗号等)要按照原样输入。
例如 scanf("%d ");%d后面有一个空格,于是在输入数据的时候,空格也要输入,像 "45(空格)" 这样才是完整的输入格式。
又如scanf("%d,");   %d后面有一个逗号,于是在输入数据的时候,都好也要输入,像 "33,"这样才是完整的输入格式。
如果你没有输入完整的格式,那么后面的数据就会被覆盖掉,造成错误。一般对于初学者来说,是一种常犯的错误。有经验的人会在scanf前面使用printf()来提醒用户输入数据的格式,而且 saanf()语句的双引号里面,一般都只有格式控制符,这样可以减少出错的机会

wangyexin 发表于 2013-3-30 12:50:51

数组应该是scanf("%d ",&a);

1187059391 发表于 2013-3-30 21:02:09

怎么是斜体

小靚同学Leon 发表于 2013-3-31 16:15:17

我也想知道答案哈哈哈哈哈哈

故乡的风 发表于 2013-3-31 18:56:22

本帖最后由 故乡的风 于 2013-3-31 19:06 编辑

以后发代码的时候,建议使用代码框,[i]估计是斜体字的标签,你贴的代码[i]都没了,我开始还以为你的代码错的呢

权志龙_爱死你la 发表于 2013-3-31 23:30:38

故乡的风 发表于 2013-3-31 18:56 static/image/common/back.gif
以后发代码的时候,建议使用代码框,[i]估计是斜体字的标签,你贴的代码[i]都没了,我开始还以为你的 ...

嗯 下次会注意……

权志龙_爱死你la 发表于 2013-3-31 23:32:59

小靚同学Leon 发表于 2013-3-31 16:15 static/image/common/back.gif
我也想知道答案哈哈哈哈哈哈

我找到答案了
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)也会出现同样的问题。
解决方法:这种错误大多是输入的时候不小心,多注意一点就好了。这种问题也不好检查,编译没有问题,一个空格也不容易看出来。当你的程序出现上面的问题时,自己对照检查一下就可以了。

权志龙_爱死你la 发表于 2013-3-31 23:33:35

wangyexin 发表于 2013-3-30 12:50 static/image/common/back.gif
数组应该是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)也会出现同样的问题。
解决方法:这种错误大多是输入的时候不小心,多注意一点就好了。这种问题也不好检查,编译没有问题,一个空格也不容易看出来。当你的程序出现上面的问题时,自己对照检查一下就可以了。

权志龙_爱死你la 发表于 2013-3-31 23:34:13

L]V static/image/common/back.gif
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)也会出现同样的问题。
解决方法:这种错误大多是输入的时候不小心,多注意一点就好了。这种问题也不好检查,编译没有问题,一个空格也不容易看出来。当你的程序出现上面的问题时,自己对照检查一下就可以了。

伽利略幼稚 发表于 2013-4-7 23:19:13

友情帮顶~   即使我不会~

伽利略幼稚 发表于 2013-4-7 23:23:37

祝好运~         

AS爱上· 发表于 2013-4-15 18:27:48

   for(i=0;i<10;i++)
      {
                scanf("%d ",&a);
      }
楼主这段代码 每回都只是给 数组第一个数赋值

权志龙_爱死你la 发表于 2013-4-16 16:53:09

AS爱上· 发表于 2013-4-15 18:27 static/image/common/back.gif
for(i=0;i

那个 是我发帖时的输入错误啦呵呵

AS爱上· 发表于 2013-4-30 23:06:24

#include<stdio.h>
#include<stdlib.h>
void main()
{
         int i,j,max,a,c;
         printf("please input all of numbers:\n");
         for(i=0;i<10;i++)
         {
                       if(i==9)
                       {
                                scanf("%d",&a);
                                break;
                       }
                       
                           scanf("%d ",&a);
               }
               
         for(j=10;j>0;j--)
         {
               for(i=1;i<j;i++)
               {
                         if(a>a)
                         {
                                 max=a;
                                 a=a;
                                 a=max;
                         }

                }
         }
               
         printf("please output all of numbers in decrease:\n");
         for(i=0;i<10;i++)
         {
               printf("%d\n",a);
         }
         system("pause");
}
不好意思解决不了你的问题,scanf()函数好像不太好终止

☆小韦QQ 发表于 2013-5-5 17:17:09

真是难得给力的帖子啊。

540167078 发表于 2013-5-8 20:44:00

我只是路过打酱油的。

Skyline 发表于 2013-6-20 21:17:06

路过!!!!!!!!!!!!

y290176346 发表于 2015-9-18 16:55:21

我是来领鱼币的

东河 发表于 2015-9-21 15:38:21

看看
页: [1] 2
查看完整版本: 冒泡排序的一个小问题