【发布时间】: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一个或到达结尾...或者重新考虑你的方法:)