冒泡排序的一个小问题
本帖最后由 权志龙_爱死你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");
}
sancf() 函数是格式输入函数,除了格式控制符外,如果有其他字符(包括空格,逗号等)要按照原样输入。
例如 scanf("%d ");%d后面有一个空格,于是在输入数据的时候,空格也要输入,像 "45(空格)" 这样才是完整的输入格式。
又如scanf("%d,"); %d后面有一个逗号,于是在输入数据的时候,都好也要输入,像 "33,"这样才是完整的输入格式。
如果你没有输入完整的格式,那么后面的数据就会被覆盖掉,造成错误。一般对于初学者来说,是一种常犯的错误。有经验的人会在scanf前面使用printf()来提醒用户输入数据的格式,而且 saanf()语句的双引号里面,一般都只有格式控制符,这样可以减少出错的机会
数组应该是scanf("%d ",&a); 怎么是斜体 我也想知道答案哈哈哈哈哈哈 本帖最后由 故乡的风 于 2013-3-31 19:06 编辑
以后发代码的时候,建议使用代码框,[i]估计是斜体字的标签,你贴的代码[i]都没了,我开始还以为你的代码错的呢 故乡的风 发表于 2013-3-31 18:56 static/image/common/back.gif
以后发代码的时候,建议使用代码框,[i]估计是斜体字的标签,你贴的代码[i]都没了,我开始还以为你的 ...
嗯 下次会注意…… 小靚同学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)也会出现同样的问题。
解决方法:这种错误大多是输入的时候不小心,多注意一点就好了。这种问题也不好检查,编译没有问题,一个空格也不容易看出来。当你的程序出现上面的问题时,自己对照检查一下就可以了。
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)也会出现同样的问题。
解决方法:这种错误大多是输入的时候不小心,多注意一点就好了。这种问题也不好检查,编译没有问题,一个空格也不容易看出来。当你的程序出现上面的问题时,自己对照检查一下就可以了。
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)也会出现同样的问题。
解决方法:这种错误大多是输入的时候不小心,多注意一点就好了。这种问题也不好检查,编译没有问题,一个空格也不容易看出来。当你的程序出现上面的问题时,自己对照检查一下就可以了。
友情帮顶~ 即使我不会~ 祝好运~ for(i=0;i<10;i++)
{
scanf("%d ",&a);
}
楼主这段代码 每回都只是给 数组第一个数赋值 AS爱上· 发表于 2013-4-15 18:27 static/image/common/back.gif
for(i=0;i
那个 是我发帖时的输入错误啦呵呵 #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()函数好像不太好终止 真是难得给力的帖子啊。 我只是路过打酱油的。 路过!!!!!!!!!!!! 我是来领鱼币的 看看
页:
[1]
2