标题:看下面这段代码 输入6191 以后为什么不能输入了
只看楼主
ch307458491
Rank: 1
等 级:新手上路
帖 子:27
专家分:2
注 册:2012-10-4
结帖率:75%
 问题点数:0 回复次数:11 
看下面这段代码 输入6191 以后为什么不能输入了
#include <stdio.h>
#include <windows.h>
void main ()
{
    int password=6191,putpassword=0;
    int i=0;
    char number;
     
    puts("*******************password*******************");
    puts("*******************warning********************");
    puts("**********you have three chances**************");
    puts("**********************************************");
    puts("**********************************************");
    while(putpassword!=password){
            if (i<=3){
               puts("please input the right password!");
               scanf("%d",&putpassword);
               i=i++;
            }   
            else{
               
                puts("three times!");
                return ;
            }
    }
    system("cls");
    puts("passwprd is right!");
    puts("please input the number");
    puts("***********************************************");
    puts("*    1.   chang the password                  *");
    puts("*    2.                                       *");
    puts("*    3.                                       *");
    puts("*    4.   exit                                *");
    puts("***********************************************");

        
        scanf("&d",&number);
        switch(number){
        case'1':password=619;break;
        case'2':puts("2222222");
        }

}
搜索更多相关主题的帖子: number warning include password void 
2012-10-05 13:24
ch307458491
Rank: 1
等 级:新手上路
帖 子:27
专家分:2
注 册:2012-10-4
得分:0 
正确输入密码以后为什么程序就结束了
2012-10-05 13:26
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
得分:0 
回复 2楼 ch307458491
基础问题,scanf里估计是你粗心,至于正确输入为什么会结束,是因为scanf里的char number吸收了puts里的结束符,老老实实用printf吧,其实它很强大的只是你不知道有些输出,其他输出都做不到的,解决方法见下面的更改
程序代码:
#include <stdio.h>
#include <windows.h>
int main ()
{
    int password=6191,putpassword=0;
    int i=0;
    char number;
    puts("*******************password*******************");
    puts("*******************warning********************");
    puts("**********you have three chances**************");
    puts("**********************************************");
    puts("**********************************************");
    while(putpassword!=password){
            if (i<=3){
               puts("please input the right password!");
               scanf("%d",&putpassword);
               i=i++;
            }
           else{
                puts("three times!");
                return ;
            }
    }
    system("cls");
    puts("passwprd is right!");
    puts("please input the number");
    puts("***********************************************");
    puts("*    1.   chang the password                  *");
    puts("*    2.                                       *");
    puts("*    3.                                       *");
    puts("*    4.   exit                                *");
    puts("***********************************************");
    getchar();                       /*吸收前面的结束符*/
    scanf("%c",&number);
    //printf("====%c====",number);
    switch(number)
    {
         case '1':password=619;break;
         case '2':puts("2222222");break;
    }
    printf("new password : %d\n",password);
    return 0;
}

免费赠送河蟹一只
2012-10-05 14:34
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
得分:0 
scanf("&d",&number);
改为:
scanf(“%c”,&number);

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-10-05 14:51
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
i=i++; 你这样写i永远都只是0。
当你每次输入一个数的时候,'\n'都会被残留在输入缓冲区里,最后scanf("%c", &number);就会读取到这个字符,而'\n'的ASCII是10,并且在switch里也没有匹配的case,所以就只剩下最后两行代码了。

另外,这跟puts是没有关系的,puts对应的是输出流,根本不会影响输入流的东西,3楼的说法有误。
解决办法是用scanf(" %c", &number);或在scanf之前加上getchar();把这个'\n'跳过。

[ 本帖最后由 lz1091914999 于 2012-10-5 14:56 编辑 ]

My life is brilliant
2012-10-05 14:54
陆嘉文
Rank: 1
来 自:江西
等 级:新手上路
帖 子:96
专家分:6
注 册:2011-11-10
得分:0 
你循环里面有一个scanf函数循环外面还有一个scanf()函数,当你输入一个数字之后呢,回再输入一个回车符,第二个scanf()函数会接受回车符,你的switch语句没有回车符选项所以就显示
Press any key to continue  所以第二个scanf函数前面再加一个number=getchar();语句就可以了!结果你自己看吧!我把你的多余的删了,茜茜。。。。
#include <stdio.h>
 void main ()
 {
     int password=6191,putpassword=0;
     int i=1;
     char number;
     while(putpassword!=password){
             if (i<=3){
                puts("please input the right password!:");
                scanf("%d",&putpassword);
                i++;
             }   
            else{
                 
                puts("three times!");
                 break;
             }
     }
   number=getchar();
  scanf("%c",&number);
  switch(number)
  {
  case '1':puts("password=6191");break;
  case '2':puts("2222222222");
  
  }
 
}
还有啊!你的i的取值改一下,i=i++;改成i++;就可以了,运行通过

[ 本帖最后由 陆嘉文 于 2012-10-5 15:00 编辑 ]
2012-10-05 14:59
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
得分:0 
回复 5楼 lz1091914999
我哪句话说影响输入流了,清指出

免费赠送河蟹一只
2012-10-05 15:03
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
以下是引用pcbaichi在2012-10-5 15:03:46的发言:

我哪句话说影响输入流了,清指出

是因为scanf里的char number吸收了puts里的结束符
是这句吗?而且我也希望你能解释一下什么是puts里的结束符?

My life is brilliant
2012-10-05 15:30
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
得分:0 
回复 8楼 lz1091914999
不是吧,输入流我都没提,
我是这么理解的,puts输出的每一个串都在新行符处换行,scanf吸收的就是那个换行。
现在看你的应该是你的解释合理,我的那个puts结束符确实不对

[ 本帖最后由 pcbaichi 于 2012-10-5 16:05 编辑 ]

免费赠送河蟹一只
2012-10-05 16:03
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
回复 9楼 pcbaichi
输入数据和输出的数据放在一个地方只会增加复杂性,而且那个标准库的设计者也不会怎么做吧。
puts和printf一样,都是住stdout里写东西,而gets和scanf是从stdin里读东西(这里面的数据就是用户从键盘输入的)。

My life is brilliant
2012-10-05 16:21



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




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

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