[英]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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.