簡體   English   中英

如何在C中讀取2行整數輸入?

[英]How to read 2 lines of integer input in C?

我正在為我的算法課程做一個項目,輸入時遇到很多麻煩。 我正在嘗試讀取這樣的輸入:

6 0 2 3 1 3
5 9 2 1 3

整數將需要轉到

int num1; // num1 = 6
int num2; // num2 = 5
int array1[100]; // array1 = {0, 2, 3, 1, 3, 0, 0, ...}
int array2[100]; // array2 = {9, 2, 1, 3, 0, 0, ...}

輸入來自文件格式的標准輸入。 因此,在終端中運行程序將如下所示:

cat input.txt | ./a.out

其中input.txt包含兩行整數。

到目前為止,這是我的錯誤嘗試:

while(scanf("%d%c", &temp, &ch) > 1){
    if (ch != '\n'){
        one[count] = temp;
    } 
    else if (ch == '\n'){
        count = 0;
        two[count] = temp;

    }
    one[count] = temp;
    count++;
    if (ch != ' ')
    {
        printf("Invalid input. Please do int + space.\n");
        return -1;
    }
    if ((temp >= 100) || (temp <= -100))
    {
        printf("Input is too big, must be between -100, 100.\n");
        return -1;
    }
    if (one[0] < 1){
        printf("Input for n cannot be smaller than one!");
        return -1;
    }
}

我認為主要的問題是我不確定如何處理多行輸入。 一行輸入對我來說很好,但多行是讓我絆倒的原因。

您可以使用getline函數獲取整個輸入行,然后遍歷該行,並使用strtol函數一次掃描一個數字。

從問題的示例中,我假設您希望兩個數組中的所有剩余條目均為零,因此不要忘記將它們歸零(手動或使用memset函數)。

並且也不要忘記free()緩沖區getline給您。

看下面的代碼。 也許對您有幫助。

通常,如果您知道要輸入多少個數字,則可以使用scanf("%d", ...)來逐一讀取數字scanf("%d", ...)並在達到預期數量時使用fflush()清除緩沖區中的其他任何數字。 此示例假定前兩個數字是每行的相應長度。 輸入看起來像:

// example input:
// 4
// 3
// 1 2 3 4
// 5 6 7
    int main()
    {
        int it;
        int it1 = 0;
        int it2 = 0;
        int line1[100];
        int line2[100];

        scanf("%d", &it1); // amount of line 1 numbers
        scanf("%d", &it2); // amount of line 2 numbers

        it = 0;
        do
        {
            scanf("%d", &line1[it]);
        } while (++it < it1);

        fflush(stdin); // clear input buffer

        it = 0;
        do
        {
            scanf("%d", &line2[it]);
        } while (++it < it2);

        return 0;
    }

實際上,我最終使用了scanf,這是下面的工作代碼。 閱讀這些評論並參考K&R確實有幫助

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

#define ARRAY_SIZE  100

void shiftArrayBackByOne(int a[]){
    for(int i = 1; i <= ARRAY_SIZE; i++){
        a[i - 1] = a[i];
    }
}

void printArray(int a[], int n){
    for(int i = 0; i < n; i++){
        printf("%d ", a[i]);
    }
    putchar('\n');
}

int main(){
    int isLineTwo = 0;
    int countOne = 0;
    int countTwo = 0;
    int inputNum;
    int num1;
    int num2;
    int array1[ARRAY_SIZE];
    int array2[ARRAY_SIZE];

    char ch;

    while(scanf("%d%c", &inputNum, &ch) > 0){

        //Puts the input into different arrays depeding
        //on value of isLineTwo
        if (isLineTwo){
            array2[countOne] = inputNum;
            countOne++;
        } else {
            array1[countTwo] = inputNum;
            countTwo++;
        }

        //Increment isLineTwo if ch is a 'newline'
        if (ch == '\n')
        {
            isLineTwo++;
        }

        //Check if user inputs more than 2 lines
        if (isLineTwo > 1){
            printf("Hey, no more than 2 input lines!\n");
        }

    }
    printArray(array1, countOne);
    printArray(array2, countTwo);

    num1 = array1[0];
    num2 = array2[0];

    shiftArrayBackByOne(array1);
    shiftArrayBackByOne(array2);

    printf("num1 = %d\n", num1);
    printf("num2 = %d\n", num2);

    printArray(array1, countOne);
    printArray(array2, countTwo);
}

暫無
暫無

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

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