簡體   English   中英

如何在 C 中的單個 scanf() 行上接受不確定的輸入

[英]How to accept indefinite inputs on a singular scanf() line in C

我正在嘗試獲取不確定的數字輸入(最多 50 個)來創建一個執行以下操作的程序:

INPUT:
Enter Numbers: 20 15 5 8 16 12
^D

OUTPUT:
20 | ********************
15 | **********
 5 | *****
 8 | ********
 etc...

我無法以指定的方式獲取用戶輸入。 這是我當前的代碼,它要求用戶在每個輸入值之間的終端中按回車鍵。 我不是在尋找整個問題的解決方案,而是如何獲得如上所示的輸入。 '^D' 應該指定用戶何時完成。 我沒有在我的代碼中實現它,因為我對如何實現感到困惑。

#include <stdio.h>

#define MAX_SIZE 50

int
main (){

printf("Enter numbers: ");
for(int i = 0; i <= MAX_SIZE; i++)
{
    int a;
    scanf("%d", &a);
}

return 0;
}

謝謝!

這里有一些讓你開始的東西:

#include <stdio.h>

#define MAX_SIZE 50

int main(void)
{
    int arr[MAX_SIZE];
    int n=0;
    
    while(n < MAX_SIZE) {
        int a;
 
        if(scanf("%d", &a) != 1) break;
 
        arr[n++]=a; 
    }
    
    // The table is not implemented
    puts("");
    for(int i=0; i<n; i++) printf("%d ", arr[i]);
}

這是實現預期結果的解決方案:

#include <stdio.h>

#define MAX_SIZE 50

int main(int argc, char** argv)
{
    int array[MAX_SIZE];
    int used_indexes = 0;
    char ch = '*';

    printf("Enter numbers:\n");
    for (int i = 0; i < MAX_SIZE; i++)
    {
        int value;
        if (scanf_s("%d", &value) <= 0)
            break;
        array[i] = value;
        used_indexes++;
    }

    printf("\n\nResult:\n");
    for (int i = 0; i < used_indexes; i++)
    {
        printf("%3d | ", array[i]);
        for (int j = 0; j < array[i]; j++)
            printf("%c", ch);
        printf("\n");
    }
    
    return 0;
}

您需要為數據動態分配空間(因為您事先不知道它的大小)。

使用函數——不要在main function中編程

int *addtoArray(int *arr, size_t *size, int val)
{
    arr = realloc(arr, (*size + 1) * sizeof(*arr));

    if(arr)
    {
        arr[*size] = val;
        *size += 1;
    }
    return arr;
}

int *readIntegers(int *arr, FILE *fi, size_t *size, const size_t maxcount)
{
    /* addd some parameter chaeck here */
    int val;
    while(fscanf(fi, "%d", &val) == 1)
    {
        int *tmp = addtoArray(arr, size, val);
        if(tmp) arr = tmp;
        else { /* error handling*/ }
        if(*size == MAXSIZE) break;
    } 
    return arr;
}


int main(void)
{
    int *arr = 0;
    size_t size = 0;

    arr = readIntegers(arr, stdin, &size, MAXSIZE);

    printf("Elements scanned: %zu\n", size);
    free(arr);
}

https://godbolt.org/z/qeKPfGM3c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM