【问题标题】:How can I find out when was a certain number input? C我怎样才能知道某个数字是什么时候输入的? C
【发布时间】:2016-03-26 06:49:40
【问题描述】:

我需要编写一个程序,我必须在其中扫描整数,它们必须在 1 到 30 之间,当第二次输入某个数字时,我必须 printf 它是什么数字以及他输入的位置是什么.

例如,如果扫描的数字是 1 3 5 7 3,则程序必须 printf“数字 3 是第二个扫描的数字”。

让我烦恼的是如何找出输入数字的位置,如何找出在第二个位置之前输入了 3。

而且我必须只用 stdio.h 制作这个程序。

【问题讨论】:

  • 展示你编写这个代码的尝试。
  • 我已经删除了代码,我会尝试解释我在做什么,如果你愿意,我可以重写我之前做的代码。所以我做了一个30个int的数组,每个int代表一个1到30之间的数字,然后在for循环中扫描数字,for循环的计数器(1,2,3...)将保存到数组位置该数字,然后是另一个 for 循环,该循环将检查新扫描的数字是否已被扫描,然后获取保存在该特定数组位置的数字。但这没有用。如果需要,我可以使用代码关闭并重新打开问题

标签: c


【解决方案1】:

您可以将读取的数字存储在数组中,如以下代码:

#include <stdio.h>

int main () {
    int vet[10000]; // assuming you wont enter more than 10000 numbers
    int i = 0;
    while (1) {
        scanf ("%d", &vet[i]);
        for (int j = 0; j < i; j++) {
            if (vet[i] == vet[j]) {
                printf ("Number %d was %dth scanned number", vet[i], j+1);
                break;
            }
        }
        i++;
    }
}

另一种方法(这要好得多,但只有在输入有限的情况下才有可能)是将第一次找到数字的位置存储在一个数组中,如果还没有找到则为 -1,如下所示:

#include <stdio.h>

int main () {
    int vet[31];
    int aux, counter;
    for (int i = 0; i <= 30; i++)
        vet[i] = -1; //not found yet
    counter = 1;
    while (1) {
        scanf ("%d", &aux);
        if (aux < 1 || aux > 30) { //check for wrong input
            continue;
        }
        if (vet[aux] == -1) {
            vet[aux] = counter;
        }
        else {
            printf ("Number %d was %dth scanned number", aux, vet[aux]);
        }
        counter++;
    }
}

【讨论】:

  • 非常感谢,您的第一个代码虽然稍作修改,但对我有用。没有尝试第二个代码,但会尝试。
  • 一般第一个代码很糟糕,因为它在不需要时立即在堆栈上分配内存。第二种方法要好得多。你应该避免第一个解决方案
  • 可以,但是如果输入不受限制或者是浮点数,例如,它就不起作用。
  • 另外,如果输入有限但范围大于预期接收的整数个数,推荐第一种方法。
  • @ForeverStudent 问题是,第一个代码还不错,但我认为你误解了一些东西。我需要一个由 30 个整数组成的数组,其中 0-30 之间的每个整数都代表一个数字,当输入超出该区间的数字时,程序会要求您再次输入该数字,因为它是无效数字,我猜我离开了那出来。所以我调整了你的程序,使其拥有一个 30 个数组,因此它占用的内存量与第二个相同。
【解决方案2】:

您希望保留一个包含 30 个位置的数组,以跟踪输入每个数字的第一个索引。 请记住,数组从索引 0 开始。 该程序将无限期运行,直到您按下ctrl + C

#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("Hello world!\n");
    int indexOfFirstOccurrence[30];
    int i;
    for(i=0;i<30;++i)indexOfFirstOccurrence[i]=0;
    int counter=1;
    int input;
    while(1)
    {
        printf("please enter input #%d:  ",counter);
        scanf("%d", &input);
        //error checking would be advised

        if(indexOfFirstOccurrence[input-1]==0)indexOfFirstOccurrence[input-1]=counter;
        printf("the first time %d was entered was at iteration %d \n",input, indexOfFirstOccurrence[input-1]);
        counter++;
    }

    return 0;
}

【讨论】:

    猜你喜欢
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多