gpt4 book ai didi

c - 使用 getch() 将 char 数转换为 int 时出现问题;

转载 作者:行者123 更新时间:2023-11-30 19:40:52 25 4
gpt4 key购买 nike

此函数不检查 ifs 处的数字...我需要做什么?tnx 提供帮助!

//Includes

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

//Defines

#define FIVE 5
#define SIX 6
#define TEN 10
#define FIFHTY 15
#define TWENTY 20
#define GEN_NUM 5309
#define GEN_MIN 1234

int main() {
char c = ' ';
int hits = 0, miss = 0;
int counter = 0;
int round = TWENTY;
int flag = 0;
int input = 0;
int gen = 0;
int num1 = 0, num2 = 0, num3 = 0, num4 = 0;
int inum1 = 0, inum2 = 0, inum3 = 0, inum4 = 0;

do {
do {
printf("generating...\n");
gen = rand() % GEN_NUM + GEN_MIN;
printf("gen %d\n", gen);
num1 = gen % TEN;
num2 = gen % (TEN*TEN) / TEN;
num3 = gen % (TEN*TEN*TEN) / (TEN*TEN);
num4 = gen / (TEN*TEN*TEN);
} while (num1 < 0 || num1 > SIX || num1 == 0 ||
num2 < 0 || num2 > SIX || num2 == 0 ||
num3 < 0 || num3 > SIX || num3 == 0 ||
num4 < 0 || num4 > SIX || num4 == 0 ||
num1 == num2 || num1 == num3 || num1 == num4 ||
num2 == num3 || num2 == num4 || num3 == num4);

do {
do {
printf("Write your guess (only 1-6, no ENTER is needed) [%d guesses left]\n", round);
num4 = getch();
putch(num4);
num3 = getch();
putch(num3);
num2 = getch();
putch(num2);
num1 = getch();
putch(num1);

num1 -= '0';
num2 -= '0';
num3 -= '0';
num4 -= '0';

printf("\nnum1 %d\n", num1);
printf("num2 %d\n", num2);
printf("num3 %d\n", num3);
printf("num4 %d\n", num4);

//if ill use scanf it will work fine...
/* scanf("%4d", &input);
printf ("\ninput: %d\n", input);
inum1 = input % TEN;
printf ("%d\n", inum1);
inum2 = input % (TEN*TEN) / TEN;
printf ("%d\n", inum2);
inum3 = input % (TEN*TEN*TEN) / (TEN*TEN);
printf ("%d\n", inum3);
inum4 = input / (TEN*TEN*TEN);
printf ("%d\n", inum4); */ //

if (num1 < 0 || num1 > SIX || num1 == 0 ||
num2 < 0 || num2 > SIX || num2 == 0 ||
num3 < 0 || num3 > SIX || num3 == 0 ||
num4 < 0 || num4 > SIX || num4 == 0 ||
num1 == num2 || num1 == num3 || num1 == num4 ||
num2 == num3 || num2 == num4 || num3 == num4)
{
printf("Only 1-6 are allowed, try again!");
flag == 1;
}
else
{
flag = 0;
}
} while (flag == 1);

hits = 0;
miss = 0;
if (inum1 == num1)
{
hits++;
}
else if(inum1 == num2 || inum1 == num3 || inum1 == num4)
{
miss++;
}

if (inum2 == num2)
{
hits++;
}
else if(inum2 == num1 || inum2 == num3 || inum2 == num4)
{
miss++;
}

if (inum3 == num3)
{
hits++;
}
else if (inum3 == num1 || inum3 == num2 || inum3 == num4)
{
miss++;
}

if (inum4 == num4)
{
hits++;
}
else if (inum4 == num1 || inum4 == num2 || inum4 == num3)
{
miss++;
}
if (hits == 4)
{
printf("4 HITS YOU WON!!!\n");
flag = 0;
}
else if (round == 0)
{
printf("OOOOHHHH!!! Pancratius won and bought all of Hanukkah's gifts.\nNothing left for you...\n");
printf("The secret password was %d\n", gen);
flag = 0;
}
else
{
printf("you got\t %d HITS\t %d MISSES\n", hits, miss);
counter++;
round--;
flag = 1;
}
} while(1 == flag);

printf("Would you like to play again? (y/n):");
c = getchar();

} while (c == 'y');
}

我想要的结果

 generating...
gen 1284
generating...
gen 3507
generating...
gen 1490
generating...
gen 1519
generating...
gen 2546
Write your guess (only 1-6, no ENTER is needed) [20 guesses left]
2465
num1 5
num2 6
num3 4
num4 2
you got 0 HITS 4 MISSES
Write your guess (only 1-6, no ENTER is needed) [19 guesses left]

真正的结果是:

 generating...
gen 1284
generating...
gen 3507
generating...
gen 1490
generating...
gen 1519
generating...
gen 2546
Write your guess (only 1-6, no ENTER is needed) [20 guesses left]
2465
num1 5
num2 6
num3 4
num4 2
you got 0 HITS 0 MISSES // it should be 0 HITS 4 MISSES
Write your guess (only 1-6, no ENTER is needed) [19 guesses left]

最佳答案

变量round的定义无处可寻。在获取用户输入的循环之前,应将其初始化为最大尝试次数。

当您读取用户输入时,您应该将其存储到变量 inum1inum2...而不是 num1num2 等等

此外,您还可以混合调用 getch() 和调用 getchar()。我不确定该行为是否符合您的预期。

请注意,我们必须重新格式化您的代码才能理解它。学习正确格式化代码。避免长行,一致缩进,使用空格,而不是制表符。

关于c - 使用 getch() 将 char 数转换为 int 时出现问题;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34405113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com