我正在尝试使用以下代码从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");
}
答案 0 :(得分: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
作为输入值会终止你的循环。
答案 1 :(得分:0)
scanf()将返回 EOF,但不会将其放入 chave 。您的代码不应该看起来更像这样吗?
int ret;
do {
ret = scanf("%d", &chave);
if ( ret == 1) {
insere(criaItem(chave), arvore);
setbuf(stdin, NULL);
}
} while( ret != EOF);