2017-12-17 9 views
1

코드는 런타임에 문자열을 입력하는 것이지만 코드는 언급 된 크기 n보다 작은 문자열 하나를 수락합니까? 오류는 어디에 있습니까?루프 길이 문제 용

가정하자 N = 3하지만 루프가 두 번 만 실행되고 따라서 입력으로 두 개의 문자열을 복용 N-1 번, 즉

int main(){ 
    int n; 
    cin>>n; 
    char str[n][100]; 
    for(int i=0;i<n;i++) 
    { 
    char c; 
    int j=0; 
    while((c=getchar())!='\n') 
    { 
     str[i][j++] = c; 
    } 
    str[i][j] ='\0'; 
    } 
} 
+0

[프로그램을 디버깅하는 방법을 배우는] 좋은 시간입니다. (https://ericlippert.com/2014/03/05/how-to-debug-small-programs /) –

+0

@Someprogrammerdude 컴파일러가 경고 또는 오류의 anykind를 표시하지 않습니다. –

+0

@SrjSunny 실제 문제는 무엇입니까? 질문은 약간 c입니다. 온화한. 코드가 한눈에 맞는 것 같습니다. – pepperjack

답변

0

그것은 (당신이 n을 작성 때부터)이 \n 리턴 문자를 판독하고 첫 번째 문자열을 비 웁니다. 입력을 끝내기위한 첫 번째 테스트 전에 또 다른 getchar()을 수행하면 제거 할 수 있습니다.

견고성을 위해 다음을 시도해 볼 수도 있습니다. cin.ignore(INT_MAX);cin.clear();cin.sync();. 다만,

int main() { 
    int n; 
    cin >> n; 
    char** str = new char*[n]; 
    for (int i = 0; i < n; i++) 
     str[i] = new char[100]; 

    getchar(); 

    for (int i = 0; i<n; i++) 
    { 
     char c; 
     int j = 0; 
     while ((c = getchar()) != '\n') 
     { 
      str[i][j++] = c; 
     } 
     str[i][j] = '\0'; 
    } 

    for (int i = 0; i < n; i++) 
     delete[] str[i]; 
    delete[] str; 
} 

를 (예 내가 http://wiki.c2.com/?ThreeStarProgrammer에서 1 등급 떨어져있어 알고

예 (내 컴파일러가 구문의 일부를 좋아하지 않는 것은 그래서 새로운 getchar에 초점을 다시 실행했다 질문에 대답하기 위해이 작업을 수행하십시오.)

+0

하지만 n은 루프 밖에서 선언되었습니다 getchar은 루프 안에 있고 저는 c를 읽지 않습니다 n , 당신은 정교하게 부탁합니다 –

+0

그게 @SrjSunny와 아무 상관이 없습니다. 'cin >> n'을 호출하면'while ((c = getchar())! = '\ n')'에 의해 읽혀지는 cin 버퍼에'\ n'을 남겨 둡니다. ]'비어 있습니다. – pepperjack

+0

이제 대단히 감사합니다.하지만 왜 다른 getchar()를 사용 했습니까? 루프에서 n 앞에 '='기호를 사용하는 것이 더 좋지 않습니까? –