2014-02-09 1 views
0

지금까지 내가 가지고 : 이것은 한 5 개 입력이 주어진다로 작동C : 입력의 각 단어가 다른 변수에 저장되도록 scanf를 사용하여 알 수없는 입력을 저장하려면 어떻게해야합니까?

char r[4][10]; 

    printf("Enter an option: \n"); 
    scanf("%s %s %s %s %s", r[0],r[1],r[2], r[3], r[4]); 
    printf("%s %s %s %s %s\n", r[0], r[1], r[2], r[3], r[4]); 

. 지금 당신이 5 개 이하의 입력을 입력하고 Enter 키를 누르면 프로그램은 5 개의 모든 값을 가질 때까지 입력을 요구하지만 계속해서 5 개의 입력이 입력되면 scanf를 중지하고 프로그램을 계속 진행합니다.

+0

루프는 다음과 같은 용도로 사용됩니다. 한 번에 하나의 값을 읽고 카운터를 증가시킵니다. – larsks

+0

get를 사용하여 줄을 가져옵니다. 루프에서 strtok (또는 strtok_s)을 사용하여 줄을 분할 한 다음 sscanf를 사용하여 각 번호를 읽습니다. 맨 페이지를 보거나 이러한 기능에 대해 도움을 받으십시오. – cup

+1

@cup : 절대 사용하지 말고'gets()'; 그것을 결코 존재하지 않는 척해라! –

답변

1

fgets()으로 줄을 읽고 sscanf()으로 구문 분석하는 것이 가장 좋습니다. - 나쁜 이동 만 r[4][10]을했지만, 첨자 4를 사용했다

char r[5][10]; 
char line[4096]; 

printf("Enter an option: \n"); 
if (fgets(line, sizeof(line), stdin) != 0) 
{ 
    int num = sscanf(line, "%9s %9s %9s %9s %9s", r[0],r[1],r[2], r[3], r[4]); 
    for (int i = num; i < 5; i++) 
     r[i][0] = '\0'; 
    printf("%s %s %s %s %s\n", r[0], r[1], r[2], r[3], r[4]); 
} 

참고 : 행에 더 이상 5 이상의 단어가됩니다.

더 나은 방법은 배열을 더 이상 검색 할 수 없거나 줄에 더 이상 단어가 없을 때까지 한 번에 한 단어를 읽는 회선을 스캔하는 루프입니다. 그래도 좀 더 까다 롭습니다.

관련 문제