如何在C中读取2行整数输入?

时间:2014-09-15 00:01:29

标签: c input stdin

我正在为我的算法类做一个项目,我在输入方面遇到了很多麻烦。我正在尝试阅读这样的输入:

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;
    }
}

我认为主要问题是我不确定如何处理多行输入。我输入的是一行输入,但多行是让我感到震惊的。

3 个答案:

答案 0 :(得分:1)

您可以使用getline函数获取整行输入,然后迭代该行,使用strtol函数一次扫描一个数字。

从您问题中的示例我假设您希望两个数组中的所有剩余条目都为零,因此不要忘记将它们归零(手动或使用memset函数。)。

并且不要忘记缓冲区free()给你的getline

答案 1 :(得分:0)

查看下面的代码。也许它可以帮助你。

通常,如果您知道将输入多少个数字,您可以使用scanf("%d", ...)逐个读取数字,并在满足预期数量时使用fflush()清除缓冲区中的任何其他数字。

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;
}

答案 2 :(得分:0)

实际上我最终使用了scanf,这是下面的工作代码。它确实有助于阅读其中一些评论,并参考K&amp; 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);
}