Как пользователь может ввести 10 элементов в массив, определенный для 100 элементов? - PullRequest
0 голосов
/ 25 февраля 2019

Здесь я хочу получить ввод от пользователя в массиве.Условие - размер массива не должен превышать 100 элементов.Но если у пользователя есть только 10 элементов на входе, что он может сделать?Потому что он не сможет остановить цикл после 10 элементов, как я определил для 100.

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int* A;
    int i;

    A = (int*)malloc(100*(sizeof(A)));

    for(i=0; i<100; i++)
    {
        scanf("%d", &A[i]);
    }
    return 0;
}

Ответы [ 4 ]

0 голосов
/ 25 февраля 2019
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int* A;
    int i;

    A = (int*)malloc(100*(sizeof(*A)));

    for(i=0; i<100; i++)
    {
        int numEl = scanf("%d", &A[i]);
        if(numEl!=1) break;
    }
    free(A);
    printf("Read %d values\n", i);
    return 0;
}

Просто сломайте, если вы нашли что-нибудь, кроме числа:

gcc q.c && ./a.out 
1
2
3



4
end
Read 4 values
0 голосов
/ 25 февраля 2019

Пользователь должен каким-то образом сообщить программе, что он завершил ввод значений.

Пользователь может сначала ввести число значений, которые он хочет прочитать:

int count;
printf("Number of values: ");
int rval = scanf("%d", &count);

if (rval == 1) {
    for(i=0; i<count && i<100; i++) {
        rval = scanf("%d", &A[i]);
        if (!rval) {
            int c;
            while ((c=getchar()) != '\n' && (c != EOF));
        }
    }
}

Или пользователь может вводить значения непрерывно, пока не будет введено специальное значение:

printf("Enter values (enter -1 to stop): ");
for(i=0; i<count; i++) {
    int value;
    int rval = scanf("%d", &value);
    if (!rval) {
        int c;
        while ((c=getchar()) != '\n' && (c != EOF));
    } else if (value != -1) {
        A[i] = value;
    } else {
        // -1 was entered
        break;
    }
}
0 голосов
/ 25 февраля 2019
char  opp="";
int i=0;
while(opp!="*")
{
    printf("Enter element %d :",i+1);
    scanf("%d",&A[i]);
    // You code here
   printf("press * to stop:");
   opp=getch();
   i++;
   if (i>=100)
    break;

}

Попробуйте это .. До тех пор, пока пользователь не введет *, он будет продолжать запрашивать ввод

0 голосов
/ 25 февраля 2019

Есть несколько способов сделать это.Вот два возможных варианта:

  • Во-первых, вы можете добавить значение Sentinel , которое пользователь вводит для остановки ввода, например, отрицательное число, ноль илине номер.Затем проверьте вход и прервитесь, если вы встретите свое дозорное значение.

  • Во-вторых, попросите пользователя ввести число значений, которые он хочет ввести первым, и сделайте, чтобы конечное условие вашего дляпетля.for(i=0; i != num_entries && i<100; i++)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...