如何防止写入 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 例程中实际有多少位数。所以挑战是如何从getnumberrepeateddigit 获取这些信息。 C 和 C++ 是不同的语言。请仅标记您真正编码的那个,因为答案可能会因实际语言而有很大差异。 【参考方案1】:

你可以在减少它之前在getnumber() 中保护j,然后返回它以在repeateddigit() 中使用它,如下所示:

repeateddigit(int from) 
    for(int i = from; ...
    ...

【讨论】:

以上是关于如何防止写入 0 而不是未输入的数组元素?的主要内容,如果未能解决你的问题,请参考以下文章

在未排序的数组中找到第 k 个最大的元素

VB6 判断输入的数字是不是为数组中的某个元素值

Vue.js - this.$refs.key 返回一个空数组或未定义而不是元素

C语言:在十个元素的数组中,判断某数是不是存在。

Java中如何判断数组元素是不是为空

Matlab如何提取非零元素