| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2012 人关注过本帖
标题:遇到一个变量初始化的问题!
只看楼主 加入收藏
hm605538951
Rank: 2
等 级:论坛游民
帖 子:25
专家分:27
注 册:2016-7-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
遇到一个变量初始化的问题!
判断一个正整数的位数
  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
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:4 
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     }
改成    printf("请输入一个不超5位的正整数(1-99999)%d:",num);         
      while(1)  //如果输入的数字大于99999,或者小于0,或者是字符,则要求重新输入(0-99999)
      {
         if((scanf("%d",&num)==0)||num>99999||num<0) printf("您输入的数字有误,请重新输入:"), scanf("%d", &num);
          else break;
         scanf("%*[^\n]");     
         //fflush(stdin);   
         
      }

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

2016-09-26 08:14
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:4 
回复 2楼 hm605538951
下面这部分改成这样;
        scanf("%d", &num);
       while(getchar()!='\n');
       while (num > 99999 || num < 0 )  //如果输入的数字大于99999,或者小于0,或者是字符,则要求重新输入(0-99999)
      {
           printf("您输入的数字有误,请重新输入:");
           scanf("%d", &num);
           while(getchar()!='\n');
       }
还有就是给num初始化-1;   
2016-09-26 12:16
hm605538951
Rank: 2
等 级:论坛游民
帖 子:25
专家分:27
注 册:2016-7-16
收藏
得分:0 
谢谢两位大大!我试一下!
2016-09-26 13:07
mini2bus
Rank: 2
等 级:论坛游民
帖 子:9
专家分:10
注 册:2016-9-26
收藏
得分:4 
#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int a,i;
    printf("请输入一个正整数\n");
    scanf("%d",&a);
    for (i=0;a>0;i++)
    {
        a/=10;
    }
    printf("%d位\n",i);
    system("pause");
}
//为什么要这么长
2016-09-26 17:25
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
楼主代码没有死循环??

人有多懒,编程就有多难。
2016-09-26 18:29
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
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 9楼 hm605538951
不会死循环应该和你用的编译器有关
大多数的编译器都是死循环.
第一次输入a,num不能被赋值,此时如果num的随机值大于99999,那么while循环条件成立,而输入流里的字符因为没有被读取而保留在输入流里,就变成死循环了。


2016-09-26 19:58
快速回复:遇到一个变量初始化的问题!
数据加载中...
 
   



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

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