标题:来看看这个for循环是怎么回事?
只看楼主
zker
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2005-2-3
 问题点数:0 回复次数:11 
来看看这个for循环是怎么回事?

每次程序都会将for循环输出字符数+1次,这是为什么呢? 例如: 输入:a 结果:123123 输入:ab 结果:123123123 #include <stdio.h>

int main(void) { int a,b,c; printf("please enter what you want : "); scanf("%c",&a); while(a!='a') { for(b=3;b>0;b--) /*就是这个循环*/ putchar(b); putchar(a); scanf("%c",&a); return 0; } return 0; }

[此贴子已经被作者于2005-2-3 21:05:08编辑过]

搜索更多相关主题的帖子: void include please return 
2005-02-03 20:08
imsuperstar
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-1-29
得分:0 
这位仁兄,恕在下愚昧,我实在看不懂阁下这个程序是为了实现什么目的,怎么又是int,又是putchar的?
2005-02-03 21:24
zker
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2005-2-3
得分:0 
没什么目的,只是不知道为什么for会多循环一次.

------------希望与大家一起进步!------------
2005-02-03 21:29
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
我也看不明白啊!

淘宝杜琨
2005-02-03 21:31
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
刚才就看了你的程序,因为几乎没有找到有一条正确使用的语句,也懒得回。

1。按你所说的现象是不可能存在的,无论你输入什么,for至多执行一次。因为while中有个return,汗,平生第一次看见这种用法.

2.回答你的问题,如果删去这个while中的return,那么,才有可能象你说的,原因是第一个scanf接收"a"这个值,但是,还有一个“回车”留在缓冲区,当执行完

for(b=3;b&gt;0;b--)    /*就是这个循环*/
putchar(b);
putchar(a);

第二个scnaf接收了这个回车

所以实际打印的是:

321(注意:这个是ASCII码的值,不是字符123)a321"回车"(回车不可见)

再看看你程序:

#include &lt;stdio.h&gt;int main(void)
{
int a,b,c;//这里定义为int
printf("please enter what you want : ");
scanf("%c",&amp;a);//而这里当char用
while(a!='a')//因为a是int,所以,你输入'a'也不会与'a'相等
{
for(b=3;b&gt;0;b--)    /*就是这个循环*/
putchar(b);
putchar(a);
scanf("%c",&amp;a);//不知什么原因int当char?
return 0;//平生第一次见到这种用法
}
return 0;//既生亮,何生渝?
}




九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-02-03 23:15
zker
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2005-2-3
得分:0 
谢谢! 下次不会再把这种问题贴上来了~~

------------希望与大家一起进步!------------
2005-02-03 23:54
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
既生亮,何生渝

恩KNOCKER发明的好句子

淘宝杜琨
2005-02-04 13:35
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-02-05 22:50
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
得分:0 
#include <stdio.h> int main() { int a; scanf("%c",&a);//记住是scanf("%c",&a);而不是scanf("%d",&a);后者当你输入a时不符值! if(a=='a') printf("OK"); return 0; } knocker 你终于让我找到一个错误了,你看看上面的结果??? 是可以相等的,因为整形和字符型都是按相同的方式进行存储的,在比较的时候应该有一个强制转换(我是这样认为的),所以。。

[此贴子已经被作者于2005-2-6 9:30:46编辑过]


差点把你忘了...
2005-02-06 09:29
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
你用的是什么系统?什么编译器?

#include &lt;stdio.h&gt;
int main()
{
    int a ;
   
    for(;;)
    {
        scanf(" %c",&amp;a);
        printf("a=%d  'a'=%d\n",a,'a');
        if(a=='a')
        printf("OK!\n");
        else printf("NO!\n");
    }
   
}


test:

a        &lt;----输入
a=-159  'a'=97     &lt;----不一样
a=-159  'a'=97
NO!
w
a=-137  'a'=97
NO!
a
a=-159  'a'=97
NO!
^C

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-02-06 12:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-11968-1-1.html




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

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