[英]exact multiple scanf input
我想知道如何使用while,if和array這樣的簡單命令在一行中准確輸入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
如果要強制輸入為一行,請先讀取輸入,然后解析它:
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
被添加以檢測是否讀取過多。
編輯
要輸入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
直到出現新的換行符號),但是在這種情況下,無法輕松設置要讀取的數字數量。
您只需要注意,如果您的行中少於5個int
則它將不起作用。
#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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.