-1

次のコードを使用して txt ファイルからデータを読み込もうとしていますが、ファイルの最初の行のみが出力されます。

int main() {
    int chave;
    char ordem[5];
    struct tTree *arvore = (struct tTree*)malloc(sizeof(struct tTree));
    arvore->raiz = NULL;
    scanf("%s", ordem); 
    printf("%s\n", ordem);
    setbuf(stdin, NULL);  
    do {
        scanf("%d", &chave);
        insere(criaItem(chave), arvore);
        setbuf(stdin, NULL); 
    } while(chave != EOF);

    if(strcmp(ordem, "PRE") == 0) {
        pre(arvore->raiz);
    }
    else if(strcmp(ordem, "POS") == 0){
        pos(arvore->raiz);
    }
    else if(strcmp(ordem, "IN") == 0){
        in(arvore->raiz);
    }
    printf("%d\n", altura(arvore->raiz)-1);
    system("pause");   
}
4

2 に答える 2

2
while (scanf("%d", &chave) == 1)
{
    insere(criaItem(chave), arvore);
    printf("Read: %d\n", chave);  // Debugging
    // setbuf(stdin, NULL);  // Pointless once there's been an I/O operation on stdin
}

これにより、前もってテストを行い、EOF やその他のエラーが正しくテストされます。ほとんどの場合、読み取り操作を実行し、ループの開始時に成功したことをテストするのが最善です。

あなたが書いたものには多くの問題がありました。特に-1、入力値として入力するとループが終了してしまうという問題がありました。

于 2012-10-23T22:18:29.157 に答える
0

scanf()は EOF を返しますが、 chaveには入れません。あなたのコードはもっとこのように見えるべきではありませんか?

int ret;
do {
    ret = scanf("%d", &chave);
    if ( ret == 1) {
        insere(criaItem(chave), arvore);
        setbuf(stdin, NULL); 
    }
} while( ret != EOF);
于 2012-10-24T04:23:56.380 に答える