2013-04-13 2 views
1

while, if 및 arrays와 같은 간단한 명령을 사용하여 기본적으로 정확하게 한 자리에 정확하게 5 개의 숫자 (정수)를 입력하는 방법에 대해 궁금합니다. 예를 들어 I 입력 공간에 의해 분리 된 5 개 개의 번호가 프로그램은 인쇄하지만 것이다 주는 경우 5 이하 5 이상 I 입력 프로그램 입력이 유효하지 않습니다. 은 지금까지 나는 exact multiple scanf input

#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

답변

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에 쓸 것입니다). 그러나이 경우 읽을 숫자의 수를 쉽게 설정할 방법이 없습니다.

5 개 미만인 경우에만 작동한다는 점에주의하십시오. int을 입력하십시오. 한 줄에있을 입력을 강제하려면

+2

이렇게하면 5 줄로 된 5 개의 숫자와 한 줄에있는 10 개의 숫자 중 처음 5 개의 숫자를 읽습니다. –

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 너무 많이 읽을 경우 감지 추가됩니다.

+1

닫기; 문제는'x 2'가'1 2 3 4 5 x' 이었기 때문에 실패 할 수도 있다는 것입니다. 이것은 정말 까다 롭습니다. '% d' 대신에'% n'을 쓰면 오프셋이보고 된 후에 공백 만 있는지 확인할 수 있습니다. –

+1

@JonathanLeffler 좋은 지적. '% s' (으)로 변경했습니다. 패턴의 단일 공백이 문자열의 여러 공백과 일치 할 수 있으므로 후행 공백은 무시됩니다. –

+0

'scanf()'또는'fscanf()'를 사용하면 문제가 될 수 있습니다 (다섯 번째 숫자 뒤에 공백이 아닌 문자가 필요하기 때문). 'sscanf()'를 사용하면 문제가되지 않습니다. 문자열의 끝은 'EOF'이고 거기에서 멈춰야합니다. 이것은 OP만큼 당신만큼 많습니다. –

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