| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1215 人关注过本帖
标题:c语言do..while问题
只看楼主 加入收藏
thunder11102
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-3-29
收藏
得分:0 
回复 10楼 TonyDeng
书上没有
我也试过很多次,还是没弄明白,貌似一个程序中有两个scanf()就会把它当做一个来使用
是不是这样啊?
2012-04-02 19:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:15 
书上不可能什么都写、什么都有,但你要自己去钻研。书上的例子,一开始教你“Hello, world!”,会指点你如何使用printf(),用打印"Hello, world!"来示范,然后又提到输出整数、浮点数,接着会提scanf(),但这些都是泛泛而谈,而不深入。你读书的时候,看到书上这样讲,就应该亲手操作,用各种各样不同的方法来检验书上说的东西。

对scanf("%d", &i),你虽然定义了int i,但scanf()这样读取的i是不是整数呢、是怎样的整数呢?正如你的实验结果告诉你,当输入字符的时候,i是一个出乎意料的整数,它居然不晓得你输入的是字符而不是数字。由这个现象,你就应该察觉必须仔细研究scanf()在键入什么内容的时候获得什么结果了。

现在,你重新写一个专门测试scanf()函数的程序:
程序代码:
int x;
scanf("%d", &x);
printf("%d,%c", x, x);

分别键入"0"、"1"、"2"、"3"、"a"、"A"等字符,看看输出什么,再看看代码,输出的分别对应是哪个格式符。总结规律之后,把scanf("%d", &x)成scanf("%c", &x),再用刚才的输入再测试一次,比较两次的结果。

如果你以后学习,都用同样的方法来做,学到的东西比纯粹看书多得多。这才是教你如何渔猎,而不是直接给你鱼虾蟹,将来不至于什么都问,而人家也不会看着这么幼稚的问题(事实上类似的问题在坛子天天有新人,次数已经超越unsigned int的上限了)而不答。

[ 本帖最后由 TonyDeng 于 2012-4-2 19:22 编辑 ]

授人以渔,不授人以鱼。
2012-04-02 19:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
根据上面的思路,你现在把原来的代码改成下面那样:
程序代码:
#include <stdio.h>
main()
{
    int i;
    do
    {
        scanf("%d",&i );
        printf("input is: %d\n", i);    // 增加这一行,输入不同的数据,看看程序到底是怎么运行的
        printf("af");
    } while(i == 100);
    printf("%d",i);
}

授人以渔,不授人以鱼。
2012-04-02 19:28
thunder11102
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-3-29
收藏
得分:0 
回复 13楼 TonyDeng
非常感谢版主的指导
我想我有些明白了是不是这样:
①--> 输入100         此时i的值为100
②--> (由于循环再次需输入)  输入a
 因为i中已经有值,输入错误,系统不再自动赋值,i = 100 再次循环

再往下就有些不明白了,按理不是应该如下么?
③--> 应该再次请求输入,但为什么没有请求输入,一直循环??

希望版主能指导一下
2012-04-02 20:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你把运行画面截出来看看

授人以渔,不授人以鱼。
2012-04-02 20:07
chinaflag
Rank: 2
来 自:福建泉州
等 级:论坛游民
帖 子:46
专家分:83
注 册:2012-4-1
收藏
得分:0 
回复 9楼 thunder11102
C标准中并没有定义非法输入时scanf的准确行为。一般来说,非法输入会导致跳过当前数据的读取,但不会终止scanf函数。由于scanf要从键盘缓冲区读取输入数据,而缓冲区在一次非法读入后并未清空,因此有可能出现始终无法读取数据而死循环的情况  刚刚学习的....
2012-04-02 21:16
thunder11102
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-3-29
收藏
得分:0 
回复 12楼 TonyDeng
刚网络掉线了,现在才好,让版主久等了


#include <stdio.h>
int main(void)
{
int x;
scanf("%d", &x);
printf("%d,%c", x, x);
}
当输入字母或字符时,结果为:
-858993460,蘌ress any key to continue

-858993460  能理解
但为什么是    而且Press的P 为什么没了?

我又在后面加了\n  
#include <stdio.h>
int main(void)
{
int x;
scanf("%d", &x);
printf("%d,%c\n", x, x);
}

又是另一种情况:
-858993460,?
Press any key to continue

为什么又变成了 ?  P也回来了

求解!!!
2012-04-02 22:06
thunder11102
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-3-29
收藏
得分:0 
回复 15楼 TonyDeng
让版主久等了,刚网络掉线

图片附件: 游客没有浏览图片的权限,请 登录注册
  
然后再输入a
图片附件: 游客没有浏览图片的权限,请 登录注册


回车
图片附件: 游客没有浏览图片的权限,请 登录注册

2012-04-02 22:12
thunder11102
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-3-29
收藏
得分:0 
回复 16楼 chinaflag
那这个怎么解决?
2012-04-02 22:14
老高1
Rank: 1
等 级:新手上路
帖 子:5
专家分:1
注 册:2012-3-20
收藏
得分:0 
回复 19楼 thunder11102
注意数据的正确输入即可,不必专门找错误,有些问题可能现在你理解不了,慢慢学
2012-04-02 22:27
快速回复:c语言do..while问题
数据加载中...
 
   



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

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