| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2003 人关注过本帖
标题:遇到一个变量初始化的问题!
取消只看楼主 加入收藏
hm605538951
Rank: 2
等 级:论坛游民
帖 子:25
专家分:27
注 册:2016-7-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
遇到一个变量初始化的问题!
判断一个正整数的位数
  1 # include <stdio.h>
  2
  3 int main(void)
  4 {
  5     int num, indiv, ten, thousand, tenthousand, place;
  6     char ch;
  7
  8     printf("请输入一个不超5位的正整数(1-99999):");
  9     scanf("%d", &num);
 10
 11     while (num > 99999 || num < 0 || (ch = getchar()) != '\n')  //如果输入的数字大于99999,或者小于0,或者是字符,则要求重新输入(0-99999)
 12     {
 13         printf("您输入的数字有误,请重新输入:");
 14         scanf("%d", &num);
 15     }
 16
 17     if (num > 9999)
 18     {
 19         place = 5;
 20         printf("您输入的是%d位数\n", place);
 21     }
 22     else    //num <= 9999
 23     {
 24         if (num > 999)
 25         {
 26             place = 4;
 27             printf("您输入的是%d位数\n", place);
 28         }
 29         else    //num <= 999
 30         {
 31             if (num > 99)
 32             {
 33                 place = 3;
 34                 printf("您输入的是%d位数\n", place);
 35             }
 36             else    //num <= 99
 37             {
 38                 if (num > 9)
 39                 {
 40                     place = 2;
 41                     printf("您输入的是%d位数\n", place);
 42                 }
 43                 else    //num <= 9 && num >= 1
 44                 {
 45                     place = 1;
 46                     printf("您输入的是%d位数\n", place);
 47                 }
 48             }
 49         }
 50     }
 51
 52     return 0;
 53 }

随机测试时,所有其他字符都能被过滤, 唯独“-”“+”被识别为数字

[student@server c_program]$ ./ex4-9
请输入一个不超5位的正整数(1-99999):a
您输入的数字有误,请重新输入:b
您输入的数字有误,请重新输入:e
您输入的数字有误,请重新输入:\
您输入的数字有误,请重新输入:]
您输入的数字有误,请重新输入:[
您输入的数字有误,请重新输入:/
您输入的数字有误,请重新输入:.
您输入的数字有误,请重新输入:,
您输入的数字有误,请重新输入:=
您输入的数字有误,请重新输入:-
您输入的是5位数

[student@server c_program]$ ./ex4-9
请输入一个不超5位的正整数(1-99999):+

您输入的是5位数

我估摸着是变量没有初始化造成的,可是如何解释这种情况呢?


[此贴子已经被作者于2016-9-26 00:08编辑过]

搜索更多相关主题的帖子: include 正整数 
2016-09-25 23:40
hm605538951
Rank: 2
等 级:论坛游民
帖 子:25
专家分:27
注 册:2016-7-16
收藏
得分:0 
做了小小的变动: 将变量num = 2; 另加了一行输出num的数值语句
确实是变量初始化的问题,但是关于“-”“+”还是想不通

  1 # include <stdio.h>
  2
  3 int main(void)
  4 {
  5     int num = 2;
  6     int indiv, ten, thousand, tenthousand, place;
  7     char ch;
  8
  9     printf("请输入一个不超5位的正整数(1-99999):");
 10     scanf("%d", &num);
 11
 12     while (num > 99999 || num < 0 || (ch = getchar()) != '\n')  //如果输入的数字大于99999,或者小于0,或者是字符,则要求重新输入(0-99999)
 13     {
 14         printf("您输入的数字有误,请重新输入:");
 15         scanf("%d", &num);
 16     }
 17
 18     if (num > 9999)
 19     {
 20         place = 5;
 21         printf("您输入的是%d位数\n", place);
 22     }
 23     else    //num <= 9999
 24     {
 25         if (num > 999)
 26         {
 27             place = 4;
 28             printf("您输入的是%d位数\n", place);
 29         }
 30         else    //num <= 999
 31         {
 32             if (num > 99)
 33             {
 34                 place = 3;
 35                 printf("您输入的是%d位数\n", place);
 36             }
 37             else    //num <= 99
 38             {
 39                 if (num > 9)
 40                 {
 41                     place = 2;
 42                     printf("您输入的是%d位数\n", place);
 43                 }
 44                 else    //num <= 9 && num >= 1
 45                 {
 46                     place = 1;
 47                     printf("您输入的是%d位数\n", place);
 48                 }
 49             }
 50         }
 51     }
 52
53     printf("num = %d\n", num);
 54
 55     return 0;
 56 }
[student@server c_program]$ ./ex4-9
请输入一个不超5位的正整数(1-99999):888
您输入的是3位数
num = 888
[student@server c_program]$ ./ex4-9
请输入一个不超5位的正整数(1-99999):a
您输入的数字有误,请重新输入:+
您输入的是1位数
num = 2
[student@server c_program]$ ./ex4-9
请输入一个不超5位的正整数(1-99999):-
您输入的是1位数
num = 2




[此贴子已经被作者于2016-9-26 00:09编辑过]

2016-09-26 00:01
hm605538951
Rank: 2
等 级:论坛游民
帖 子:25
专家分:27
注 册:2016-7-16
收藏
得分:0 
谢谢两位大大!我试一下!
2016-09-26 13:07
hm605538951
Rank: 2
等 级:论坛游民
帖 子:25
专家分:27
注 册:2016-7-16
收藏
得分:0 
回复 6楼 mini2bus
刚学到这个地方,主要是练习 if .....else,

你的方法很巧妙

[此贴子已经被作者于2016-9-26 19:24编辑过]

2016-09-26 19:19
hm605538951
Rank: 2
等 级:论坛游民
帖 子:25
专家分:27
注 册:2016-7-16
收藏
得分:0 
回复 7楼 TAAAAB
没有啊
2016-09-26 19:19
hm605538951
Rank: 2
等 级:论坛游民
帖 子:25
专家分:27
注 册:2016-7-16
收藏
得分:0 
回复 10楼 linlulu001
我使用的编译器默认将变量初始化为0,又解释不了先前变量初始化的问题了,先前以为变量未初始化,应该是个随机的垃圾量,位数超5位

  1 # include <stdio.h>
  2
  3 int main(void)
  4 {
  5     int num_int;
  6     short num_short;
  7     long num_long;
  8     float num_float;
  9     double num_double;
 10
 11     printf("num_int = %d\n", num_int);
 12     printf("num_short = %d\n", num_short);
 13     printf("num_float = %f\n", num_float);
 14     printf("num_double = %lf\n", num_double);
 15     return 0;
 16 }
~      

[student@server c_program]$ ./test1
num_int = 0
num_short = 0
num_float = 0.000000
num_double = 0.000000



[student@server c_program]$ ./ex4-9
请输入一个不超5位的正整数(1-99999):a
您输入的数字有误,请重新输入:888
您输入的整数是888,它是3位数。
[student@server c_program]$ ./ex4-9
请输入一个不超5位的正整数(1-99999):]
您输入的数字有误,请重新输入:\
您输入的数字有误,请重新输入:/
您输入的数字有误,请重新输入:-
您输入的整数是32764,它是5位数。
[student@server c_program]$ ./ex4-9
请输入一个不超5位的正整数(1-99999):+
您输入的整数是32767,它是5位数。


[此贴子已经被作者于2016-9-27 11:10编辑过]

2016-09-27 10:49
hm605538951
Rank: 2
等 级:论坛游民
帖 子:25
专家分:27
注 册:2016-7-16
收藏
得分:0 
回复 13楼 蹴鞠者
编译器是gcc,版本是4.85
2016-09-27 11:41
快速回复:遇到一个变量初始化的问题!
数据加载中...
 
   



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

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