GetChar를 사용하여 프로그램을 실행하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/2002522

  •  18-09-2019
  •  | 
  •  

문제

나는 총 C N00B가 C Off K & R을 가르치려고 노력하고 있습니다. 내 질문은 일종의 창피한 초등입니다. 좋아, 여기 간다 : 나는 GetChar를 사용하여 내가 기대했던 출력의 종류를 제공하기 위해 프로그램을 얻을 수 없다. 당신이 K & R을 가지고 있다면, 나는 운동 1.13에 갇혀 있습니다. 질문은 "입력에 단어 길이의 히스토그램을 인쇄하는 프로그램을 작성합니다."

나는 dev-c ++ (mingw compiler)를 사용하여 XP를 사용하고 명령 줄에서 프로그램을 실행하고 있습니다. 내 문제는 프로그램을 실행하려고 할 때 스캔 할 캐릭터를 입력하기를 기다립니다. 그러나 입력을 완료하고 Enter를 누르면 그렇지 않습니다. 아무것. 예상대로 히스토그램을 인쇄 할 것으로 기대합니다. 실제로 코드에서 볼 수 있듯이 CTR 배열의 내용을 인쇄하려고 할 때 코드에서 볼 수 있듯이 단어 길이를 계산하지는 않습니다.

나는 그것이 너무 N00B로 내 코드인지 또는 결함이있는 명령 줄인지 전혀 모른다. 하지만 컴파일하고 실행하려고 할 때는 시스템과 관련이 있다고 생각합니다. 모델 프로그램, 같은 일이 발생합니다. 입력을 입력하고 Enter를 누르면 아무 일도 일어나지 않습니다. 내가 ctrl-c 인 경우, 때로는 모델 출력과 같은 것처럼 보이는 별표 또는 두 개를 뱉어냅니다. 다른 경우에는 아무것도하지 않습니다 (프롬프트로 바로 돌아갑니다).

운동에 대한 내 코드는 다음과 같습니다. 나는 이것에 하루 종일 보냈고 프로그래밍을 계속할 수있는 능력에 의문을 제기하고 있습니다. 누구 든지이 구멍에서 나를 데려 갈 수 있다면 정말 감사합니다!

또한 위에서 언급 한 모델 프로그램에 대한 또 다른 질문이 있지만 자체 질문으로 게시해야한다고 생각합니다. 모두 감사합니다 :)

#include <stdio.h>

//#define 1 IN
//#define 0 OUT
int main () {
    //start w/ state = OUT
    int c = 0;
//    int state = OUT;
    int len = 0;
    int ctr[12];
    int i, j;
    i = j = 0;

    for (i = 0; i <12; i++)
        ctr[i] = 0;
    while ((c = getchar()) != EOF)
       if (c != ' ' && c != '\t' && c != '\n') {
//            state = IN;
            len++;
            printf("%d", len);
            }
       else {
            ctr[len]++;
            len = 0;
            }            
    for (i = 0; i <12; i++) 
        printf("%d\n", ctr[i]);
    for (i = 0; i <12; i++) {
        printf("%d\n", i);   
        for (j = 0; j <= ctr[i]; j++)
            printf("-");
        printf("\n");
        }
    return 0;
}
도움이 되었습니까?

해결책

당신의 While 루프는 끝이 아닌 파일 끝을 나타내는 EOF를 찾고 있습니다.

Windows에서는 파일 끝을 시뮬레이션하려면 Ctrl-Z를 입력해야합니다.

다른 팁

실제로 C (귀하의 입력)를 어디에나 저장하거나 인쇄하는 것처럼 보이지 않습니다. 문자열의 크기를 인쇄하지만 실제 문자는 아닙니다. 당신이 ctr [i] = c; 어딘가에 (배열에 문자를 추가하는 것) 배열을 인쇄하면 입력이 표시됩니다. 아, 그렇습니다. Ctrl-Z에 대한 답도 중요합니다. 또한, 당신이 언어를 완전히 익숙하지 않다면, 나는 당신이 당신의 컨텐츠 주위에 괄호를 넣을 것을 강력히 촉구합니다. 코드를 한눈에 살펴보고 While 루프의 범위에 무엇이 떨어질 지 알기까지는 시간이 걸리고 주위에 버팀대가 없다면 무엇이되지 않을지 알 수 있습니다.

나는 코드에 실제로 잘못된 것을 보지 못했기 때문에 GCC 아래로로드했고 while 루프를 종료하기 위해 EOF (ctrl-d)를 넣어야한다는 것을 기억하는 한 잘 작동하는 것 같습니다. 나는 4 줄을 입력했고 답변의 정확성에 대해 어떤 진술도 할 수는 없지만, 입력 할 때마다 입력 한 문자 수와 동일한 일련의 숫자를 얻은 다음 공간이 뒤 따릅니다. 이것이 바로 당신의 코드가하는 일입니다.

CTRL-D에 입력했을 때 요약 정보가 있습니다. 다시 말하지만, 나는 출력의 정확성에 대한 진술을하지 않을 것이지만, 코드에 설명 된대로 두 개의 주요 섹션을 얻었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top