1

我想知道如何使用简单的命令(例如 while、if 和数组)在一行中基本上输入 5 个数字(特别是整数)。例如:如果我输入 5 个用空格分隔的数字,1 2 3 4 5 程序将打印 1 2 3 4 5 但是,如果我输入小于 5 或​​大于 5,1 2 3 4 程序将打印无效输入。到目前为止我有

#include<stdio.h>
int main(int argc,char *argv[]){
    int array[5], numbers;
    numbers = 0;
    while (numbers < 5) {
        scanf("%d", &array[numbers]);
        numbers  = numbers + 1
    }
    printf("%d %d %d %d %d\n", array[0], array[1], array[2], array[3], array[4]);
    return 0;
}

如果我们为所有数组单元分配 9999(程序未使用的数字)会怎样。我们创建一个循环来检查每个数组是否已更改为一个新值,如果它仍然是 9999,它将是无效的。但是这里的问题仍然存在,我们如何只抓住一行不同数量的输入并继续前进。例如输入 2 3 输出 2 3 9999 9999 9999 或输入 2 3 4 输出 2 3 4 9999 9999

4

3 回答 3

1

如果你想强制输入在一行,首先读取输入然后解析它:

char line[100];
fgets(line, 100, stdin);
char x[100];
int n = sscanf(line, "%d %d %d %d %d %s", array, array+1, array+2, array+3, array+4, x)
if (n != 5)
    printf("invalid input\n");
else
    printf("read 5 numbers\n");

添加 以检测是否读取了x太多内容。

于 2013-04-13T00:45:44.037 回答
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int intRead(int array[], int size){
    char buff[128];
    int status=!0;//status == 0, Something happened!

    printf("\ninput %d integer:", size);
    while(fgets(buff, sizeof(buff), stdin)){
        int count=0;
        char*p;

        for(p=buff;NULL!=(p=strtok(p, " \t\n"));p=NULL){
            char *ck;
            int i;
            i=(int)strtol(p, &ck, 0);
            if(*ck){
                fprintf(stderr, "invalid input:can't parse of int <<%s>>\n", p);
                status=0;
                continue;
            }
            if(count < size){
                array[count++]=i;
                continue;
            }
            count = size + 1;//more than
            break;
        }
        if(count < size)
            fprintf(stderr, "invalid input: less than %d\n", size);
        else if(count == size) return status;
        if(count > size)
            fprintf(stderr, "invalid input: more than %d\n", size);
        printf("\ninput %d integer:", size);
        status = !0;
    }
    return 0;
}

int main(int argc,char *argv[]){
    int array[5];

    intRead(array, 5);//or: while(!intRead(array, 5));
    printf("%d %d %d %d %d\n", array[0], array[1], array[2], array[3], array[4]);
    return 0;
}
于 2013-04-13T10:21:52.153 回答
0

编辑

要输入 5 个数字,您可以使用

int a[5];
char x;

scanf("%d %d %d %d %d", &a[0], &a[1], &a[2], &a[3], &a[4]);
while(scanf("%*[^\n]%*c")) {
    scanf("%c", &x); // after 5 ints were loaded, get rid of rest of the elements untill new line symbol
}
printf("%d %d %d %d %d\n\n", a[0], a[1], a[2], a[3], a[4]);

它会忽略 5 个数字之后的所有内容(实际上,它会一直写入到x出现换行符为止),但在这种情况下无法轻松设置要读取的数字数量。

您只需要注意,如果您的排队时间少于 5int秒,它将不起作用。

于 2013-04-13T00:42:50.760 回答