簡體   English   中英

而在C中使用EOF時

[英]while with EOF in C

我正在嘗試使用以下代碼從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");   
}
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作為輸入值會終止循環。

scanf()返回 EOF,但不會將其放入chave中 您的代碼不應該看起來像這樣嗎?

int ret;
do {
    ret = scanf("%d", &chave);
    if ( ret == 1) {
        insere(criaItem(chave), arvore);
        setbuf(stdin, NULL); 
    }
} while( ret != EOF);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM