Могу ли я вставить цикл for в scanf? - PullRequest
0 голосов
/ 08 октября 2018

Я хочу, чтобы в одной строке было неизвестное количество входов.Например, пользователь может ввести: «ans: 1 2 3 4 5» и scanf () сохранит эти пять чисел в массиве.Проблема в том, что программа не знает, сколько будет входных данных.

#include <stdio.h>
int main()
{
    int i;
    int input[4];
    scanf("ans: " for(i = 0, i < 3,i++){scanf(" %d", &input[i]);};
    return 0;
}

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

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Используйте fgets() и sscanf() с "%n"

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

int main(void) {
    char input[100];
    int arr[10];

    //fgets(input, sizeof input, stdin);
    strcpy(input, "1 2 42 56 -3 0 2018\n"); // fgets

    char *pi = input;
    int tmp, pp, i = 0;
    while (sscanf(pi, "%d%n", &tmp, &pp) == 1) {
        if (i == 10) { fprintf(stderr, "array too small\n"); exit(EXIT_FAILURE); }
        pi += pp;
        arr[i++] = tmp;
    }
    printf("got this ==>");
    for (int k = 0; k < i; k++) printf(" %d", arr[k]);
    puts("");
}
0 голосов
/ 08 октября 2018

Вы задали этот вопрос наоборот.

Вы можете достичь того, чего ожидаете, поместив scanf в цикл. Даже вы можете попросить пользователя указать, сколько входных данных он хочет ввести.

#include <stdio.h>
int main()
{
    int i;
    int input[4];
    printf("Enter the number of inputs you want to give : ");
    scanf("%d", &n);
    for(i = 0; i < n;i++)
    {
     printf("Enter the input number %d : ",i);
     scanf("%d", &input[i]);
    }
    return 0;
}
...