该程序旨在一次接收一个数字,并使用该数字作为数组的索引来检查它是否为真;如果是,那么突破循环,如果没有,将其设置为true并继续扫描其他数字直到它到达最后一个。它应该只告诉一个数字在这一点上是否重复。
到目前为止,我有这个代码,但我似乎无法让它运行起来。谁能帮我?我注意到在进行故障排除时,通过测试执行后的变量值,有时数字甚至不读,只读取输入的第一个数字。
以下是代码:
#include <stdio.h>
#define true 1
#define false 0
typedef int bool;
int main(void)
{
// Variables to contain the seen digits
bool seendig[10] = { false };
long entered;
int container;
printf("This Program Is Designed To Determine If Any Digits Has Been Repeated!\n Please Enter a Number: ");
scanf("%1d", &entered);
while (entered > 0)
{
container = entered;
if (seendig[container])
break;
seendig[container] = true;
entered /= 10;
}
if (entered > 0)
printf("\nThe Digit Was Repeated\n\n");
else
printf("The Digit Was Not Repeated\n\n");
system("pause");
return 0;
}
答案 0 :(得分:1)
部分
container = entered;
if (seendig[container])
如果输入10或更大的整数,将导致超出范围的访问。
我想
container = entered;
应该是
container = entered % 10;
获取十进制的最低有效数字。
答案 1 :(得分:1)
您的代码是否仅尝试让用户输入1个号码?还是很多?如果是后者那么你的scanf("%1d",&entered);
应该在循环内部,我建议你使用测试后循环或do-while loop
,因为你需要先让用户输入一个数字然后才能检查它
您还应该考虑 0 ,因为它是数组中的有效索引值
do {
printf("This Program Is Designed To Determine If Any Digits Has Been Repeated!\nPlease Enter a Number: ");
scanf("%d", &temp);
entered = temp;
if(temp >= 0){
while(temp > 0){
entered = temp % 10;
temp/=10;
}
}else{
break;
}
if(entered >= 0 && seendig[entered] != true){
seendig[entered] = true;
}else{
flag = 1;
}
printf("\n");
}while(flag == 0);
if (entered >= 0){
if(flag == 1){
printf("\nThe Digit Was Repeated\n\n");
}else{
printf("The Digit Was Not Repeated\n\n");
}
}else{
printf("The Digit You have Inputted is a Negative Value\n\n");
}
答案 2 :(得分:0)
你应该将这行代码添加到while循环结束
scanf_s("%d", &entered);