【问题标题】:Why does my output keep showing "No repeated digits"?为什么我的输出一直显示“没有重复的数字”?
【发布时间】:2020-10-18 06:42:18
【问题描述】:

我似乎找不到我的错误。

如果我输入 28212 或任何包含多个数字的数字,它会给我输出“无重复数字”。

// Check numbers for repeated digits
#include <stdio.h>
#include <stdbool.h>

int main (void)
{
    bool digit_seen[10] = {false} ;
    int digit ;
    long n;


    printf("Enter a number: ");
    scanf("%1d", &n);
    while(n > 0){
        digit = n % 10 ;
        if (digit_seen[digit])
            break;

        digit_seen[digit] = true;
        n /= 10;
    }
    if (n > 0)
        printf("Repeated digits\n");
    else
        printf("No repeated digits\n");
    
    return 0;
}

【问题讨论】:

  • 错字:%1d 应该是%ld
  • %1d 表示仅将 1 位读入 n。所以你正在设置n = 2,它没有任何重复的数字。此外,%d 用于int,而不是long
  • 如果您启用详细警告,编译器应该会警告您有错误的long 格式代码。
  • 修复scanf() 错误后,您需要修复最终条件。实际上,在循环结束时n 将始终为零(在重复除以十之后):您需要检查digit_seen 的每个元素,直到找到true 一个或到达结尾...或者重新考虑你的方法:)

标签: arrays c loops


【解决方案1】:

您使用了%1d,它只从整数输入中读取一个字符。由于输入只有一个字符,它总是打印No repeated digits

由于 n 是long,你应该使用%ld

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多