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

标签 c if-statement int getch

此函数不检查 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/

相关文章:

c - 并行程序的时间计算

php - C 到 PHP,字符处理

c - 无法使用我的套接字服务器程序连接多个客户端

java - while 循环的哨兵值

java - 为什么我的应用程序中的电子邮件验证总是出错?

c++ - 关于二进制数字的 int 数组

mysql - 在 MySQL 中将 int 转换为 varchar 数据类型

c - 有没有一种简单的方法可以从 C 中的字符串数组创建字符串?

javascript - 使用 JQuery 根据另一个 DIV 中文本的长度修改 DIV

c - 为什么只有 1% 的时间我会得到不同的结果?