如何防止写入 0 而不是未输入的数组元素?
Posted
技术标签:
【中文标题】如何防止写入 0 而不是未输入的数组元素?【英文标题】:How can I prevent writing 0 instead of non-entered array elements? 【发布时间】:2020-04-08 19:04:33 【问题描述】:我有一个任务,我们要求的正是:用户将输入一个介于 0 和 999.999 之间的数字。该编号的步数将分配给一个数组,该数组将打印在屏幕上。然后将在此数组中找到重复的数字并将其打印在屏幕上。这是我的源代码。我的问题是当用户输入非6位数字时,例如输入4位数字时,数组的最后2个元素自动为0。如下所示,输出显示“0重复2次”。如何防止创建这些 0?
#include "stdlib.h"
#include <stdio.h>
#include "Windows.h"
int array[6];
void startup()
printf("\t\t\t\t-----------------------------------------\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t| Program is starting... |\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t-----------------------------------------\n");
printf("Program is starting. ");
printf("3..");
Sleep(1000);
printf("2..");
Sleep(1000);
printf("1");
Sleep(1000);
system("cls");
void getnumber()
int number, j = 0;
printf("Enter a number between 0 and 999999: ");
scanf_s("%d", &number);
if (number >= 0 && number <= 999999)
for (int i = 10; j <= 5; j++)
array[j] = (number % i);
number = number / i;
if (number == 0)
break;
printf("\n");
for (j; j >= 0; j--)
printf("%d ", array[j]);
printf("\n\n");
else
printf("Enter a number in the specified range.\n\n");
printf("\t\t\t\t-----------------------------------------\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t| Going back.... |\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t-----------------------------------------\n");
printf("Going back. ");
printf("3..");
Sleep(1000);
printf("2..");
Sleep(1000);
printf("1");
Sleep(1000);
system("cls");
getnumber();
void repeateddigit()
for (int i = 0; i <= 5; i++)
int repeated = 1;
for (int j = (i + 1); j <= 5; j++)
if (array[i] == array[j])
repeated++;
printf("%d is repeated %d times.\n", array[i], repeated);
while (array[i] == array[i + 1])
i = i + 1;
int main()
startup();
getnumber();
repeateddigit();
printf("\n");
system("PAUSE");
return 0;
【问题讨论】:
当我看到int array[6];
时,我的想法是立即的; 1)为什么是全局变量。 2)为什么是 C 风格的数组而不是 std::array
(或 std::vector
)?
创建minimal reproducible example
问题是您的repeateddigit
例程假定您有六位数字。但是您知道getnumber
例程中实际有多少位数。所以挑战是如何从getnumber
到repeateddigit
获取这些信息。
C 和 C++ 是不同的语言。请仅标记您真正编码的那个,因为答案可能会因实际语言而有很大差异。
【参考方案1】:
你可以在减少它之前在getnumber()
中保护j
,然后返回它以在repeateddigit()
中使用它,如下所示:
repeateddigit(int from)
for(int i = from; ...
...
【讨论】:
以上是关于如何防止写入 0 而不是未输入的数组元素?的主要内容,如果未能解决你的问题,请参考以下文章