一次读取一位数的数字,检查重复

时间:2016-05-01 13:26:40

标签: c syntax-error

该程序旨在一次接收一个数字,并使用该数字作为数组的索引来检查它是否为真;如果是,那么突破循环,如果没有,将其设置为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;
}

3 个答案:

答案 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);