当前位置: 首页 > 知识库问答 >
问题:

使用while和do-while循环在c中输出一个简单的数字猜测游戏

燕和同
2023-03-14

我是C编程的初学者,我需要一些关于数字猜测游戏中的右位计数器的帮助。在这个游戏中,会生成一个4位的随机秘密数字,用户必须通过输入不同的数字来猜测它。在此代码中,用户输入的每个数字都会被扫描和检查。如果在输入中找到秘密数字的数字,计数器k会添加1,因此它应该给出猜测的数字数。顺序并不重要(在这个阶段)。问题:游戏给出的猜测数字较少。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(){
setvbuf(stdout,NULL,_IONBF,0);

int n=10000;
srand(time(NULL));
int r=rand()%n;//makes a random (secret) number

int d1,d2,d3,d4;//declares digits of the random number

d1=r/1000;//these 4 lines calculate separate digits of the random number
d2=(r-d1*1000)/100;
d3=(r-d1*1000-d2*100)/10;
d4=r-d1*1000-d2*100-d3*10;

char c;//declares char c which will be a digit of a number given by user (guess)

if(d1!=d2&&d1!=d3&&d1!=d4&&d2!=d3&&d2!=d4&&d3!=d4){//prevents using a random number which has some duplicate digits

 printf("Enter a number:");
 scanf("%c",&c);//scan first digit(character) of user's guess

 while(c!='\n'){//scan all digits(characters) of user's guess until new line
 int k=0;//initialize a counter of right guesses

 while(c!='\n'){//scan all digits(characters) of user's guess until new line
  c=getchar();//scan each character of a user's number
  int digit=c-48;//convert the character into digit by using its ASCII value

   if(digit==d1){//if user digit coincides with the first digit of random number add 1 to counter
    ++k;
   }
   else if(digit==d2){//if no, check if it coincides with second digit
    ++k;
    }
   else if(digit==d3){
    ++k;
   }
   else if(digit==d4){
    ++k;
   }

  }

 printf("number of guessed digits is %i\n",k);
 printf("secret number =%i\n\n",r);

 printf("Enter a new number:");//asks the user to try another number
 scanf("%c",&c);//scan new digit
 }
}

return 0;

}

输出示例:

输入数字:2015猜测数字为2个秘密数字=4901

输入新数字:4902猜测数字为2个秘密数字=4901

输入一个新数字:4901猜测数字的数量为3秘密数字=4901

输入一个新号码:

感谢提前帮助!

共有1个答案

轩辕越泽
2023-03-14

您总是丢失第一位数字,因为您在scanf()之后立即使用getchar()而没有检查scanf()的结果。
移动

c=getchar();

在if条件之后。

 类似资料:
  • 我正在尝试创建一个游戏,它将要求用户进行一个猜测,如果猜测低于随机生成的整数,那么它将打印(“太低了!再试一次。”),如果猜测高于猜测,那么它将打印(“太高了!再试一次”),如果猜测等于随机整数,那么它将询问用户她是否想再玩一次。这就是我遇到麻烦的地方--如果输入了“y”,我如何让代码循环回它来重新创建随机整数并开始循环呢?

  • 在 C# 中,do while 循环同样用于多次迭代一部分程序,但它与我们前面学习的 for 循环和 while 循环不同,for 循环和 while 循环会在循环开始之前先判断表达式的结果,只有表达式结果为真时才会开始循环,而 do while 循环会先执行一遍循环主体中的代码,然后再判断表达式的结果。也就是说,不论表达式的结果如何,do while 循环至少会执行一次。 do while 循环

  • C++ 循环 不像 for 和 while 循环,它们是在循环头部测试循环条件。do...while 循环是在循环的尾部检查它的条件。 do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。 语法 C++ 中 do...while 循环的语法: do { statement(s); }while( condition ); 请注意,

  • 本文向大家介绍简单掌握C++编程中的while与do-while循环语句使用,包括了简单掌握C++编程中的while与do-while循环语句使用的使用技巧和注意事项,需要的朋友参考一下 While 语句 重复执行语句,直到表达式计算为零。 语法 备注 expression 的测试在每次执行循环前发生;因此 while 循环执行零次或更多次。 表达式必须是整型、指针类型或包含明确的整型或指针类型转

  • 与while循环顶部测试循环条件的for和while循环不同, do...while循环do...while循环底部检查其条件。 do...while循环类似于while循环,除了do ... while循环保证至少执行一次。 语法 (Syntax) Perl中do...while循环的语法是 - do { statement(s); }while( condition ); 应该注意的是

  • 与while循环顶部测试循环条件的for和while循环不同,Objective-C编程语言中的do...while循环检查循环底部的条件。 do...while循环类似于while循环,除了do ... while循环保证至少执行一次。 语法 (Syntax) Objective-C编程语言中do...while循环的语法是 - do { statement(s); } while( co