Cプログラムでは、正しい出力を与えた後に終了しません。

サンフランシスコでは:

私は、スペースや改行で区切られた数字のシーケンスを読み込むプログラムをやろうとしているので。出力は、同じ配列でなければならないが、不要なゼロを消去(charachters「EOF」の配列は、プログラムを終了します)。例えば、パー

  1. 01492 102934 1492 102934として出てくるはずです
  2. 9312 0 01923は9312 0 1923として出てくるはずです
  3. 0001249 0000は1249のように出てくるはずです0

さて、私は、その目的を達成したが、バリケードを越えてきました。私はEOFシーケンスを入力しない限り、プログラムが終了しません。私は無限ループを与えながら、(1)ランニングを持っているので、多分それはです。私はそれを削除しようとすると、しかし、プログラムがさえまったく印刷されません。私はまだ、これは学校のプロジェクトのためである学んでいます。すべてのヘルプはapreciatedされます!

ここで、コードは次のとおりです。

#include <stdio.h>
int main(){
char c;
int i=0;
while(1){
    c=getchar();
    if (i==0){
        if(c=='0'){
            while (c=='0'){
            c=getchar();
            }
        }
        printf("%c",c);
        i=i+1;
    }
    else if (c==' '){
        printf("%c",c);
        c=getchar();
        if(c=='0'){
            while (c=='0'){
            c=getchar();
            }
        }
        printf("%c",c);
    }
    else if (c=='E'){
        c=getchar();
        if (c=='O'){
            c=getchar();
            if(c=='F'){
                printf("\n");
                return 0;
            }
        }
    }
    else{
        printf("%c",c);
    }
}

}

user3121023:

終了するには、プログラムを指示するいくつかの方法が存在しなければなりません。
これにより、プログラムは手紙に終了しますxか二つの連続改行または入りますEND
getchar返されEOFたファイルからの読み込みに残って何もないとき。それからシミュレートすることが可能stdinで(キーボード)、ctrl + zWindows上またはctrl + dLinux上。

#include <stdio.h>
#include <string.h>

int main ( void) {
    char done[4] = "";
    int c = 0;
    int prior = 0;
    int reading = 0;
    int zero = 1;

    while ( EOF != ( c = getchar ( )) && 'x' != c) {
        if ( '\n' == c && '\n' == prior) {
            break;
        }
        if ( c >= '0' && c <= '9') {
            reading = 1;
            if ( '0' != c) {
                zero = 0;
            }
            if ( ! zero) {
                putchar ( c);
            }
        }
        else {
            if ( reading) {
                if ( zero) {
                    putchar ( '0');
                }
                if ( ' ' == c || '\n' == c) {
                    putchar ( c);
                }
                else {
                    putchar ( ' ');
                }
            }
            reading = 0;
            zero = 1;
        }
        prior = c;

        done[0] = done[1];
        done[1] = done[2];
        done[2] = c;
        done[3] = 0;
        if ( 0 == strcmp ( done, "END")) {
            break;
        }
    }

    return 0;
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=34203&siteId=1