【问题标题】:C program, problem with scanning and digitsC程序,扫描和数字问题
【发布时间】:2021-01-15 12:52:35
【问题描述】:

作为我程序的一部分,我需要扫描一个四位数字,并将每个数字放在不同的变量中。这是我现在尝试的,但不知何故,当我运行代码时,它总是打印 0。我找不到问题,有人可以告诉我我做错了吗?

#include <stdio.h>

int main()

{

    int userGuess = 0;
    int digit = 0;
    int userFourth = 0;
    int userThird = 0;
    int userSecond = 0;
    int userFirst = 0;
    printf("Write your guess\n");
    scanf("%d" , &userGuess);
    while (userGuess != 0)
    {
        int userFourth = userGuess % 10;
        userGuess = userGuess / 10;
        int userThird = userGuess % 10;
        userGuess = userGuess / 10;
        int userSecond = userGuess % 10;
        userGuess = userGuess / 10;
        int userFirst = userGuess % 10;
    }
    printf("user fourth is %d\n" , userFourth);
    printf("user third is %d\n" , userThird);
    printf("user second is %d\n" , userSecond);
    printf("user first is %d\n" , userFirst);
    
    return 0;
}

【问题讨论】:

  • 提示:了解数组。这不是一种可持续的编程方法,而且你已经养成了一些刻薄的坏习惯。
  • while 块内的变量与外面的变量不同。你是shadowing他们。
  • 还值得注意的是,您可以使用直接字符串来解决这个问题,不需要数组本身。请记住,对于给定的 char x[n],您始终可以引用单个字符并测试这些字符与已知值,例如 x[1] == '6'
  • 又一个应该注意编译器警告的情况。这段代码应该生成一些类似于“变量被赋值但从未使用过”的内容。

标签: c


【解决方案1】:

这里的问题是变量阴影,或者换句话说,创建两个独立但名称完全相同的变量:

int main() {
    int userGuess = 0;
    int userFourth = 0; // Declare `userFourth`

    while (userGuess != 0)
    {
        int userFourth = userGuess % 10; // Declare another `userFourth`

这里在顶层main() 函数中有一个userFourth还有在内循环中有一个userForth。他们没有关系。他们不共享数据。

去掉第二种情况下的int,不用重新声明,直接使用已有的变量即可。

【讨论】:

    【解决方案2】:

    我找不到问题,谁能告诉我我做错了吗?

    除了阴影@tadman,不需要代码行。无需循环

    // while (userGuess != 0)
    

    扫描一个四位数字,并将每个数字放入不同的变量中。

    代码可以使用 width 限制直接扫描成 4 个变量。

    代码使用"%n" 保存扫描输入的偏移量以检测正确的数字计数。

    int userFirst, userSecond, userThird, userFourth;
    
    int n = 0;
    scanf("%1d%1d%1d%1d%n", &userFirst, &userSecond, &userThird, &userFourth, &n);
    if (n == 4) {
      puts("Success");
      printf("user fourth is %d\n" , userFourth);
      printf("user third is %d\n" , userThird);
      printf("user second is %d\n" , userSecond);
      printf("user first is %d\n" , userFirst);
    } else {
      puts("Fail");
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多