使用 scanf 直到 EOF 将值插入节点

Using scanf until EOF to insert values into nodes

提问人:mathisfun1234 提问时间:11/15/2020 更新时间:11/15/2020 访问量:119

问:

我想从scanf获取用户输入,然后将这些整数保存到节点中(并将节点链接到链表上)。用户可以输入整数,直到他们按 ctrl+d。

这是我目前拥有的,但是一旦用户点击 ctrl+d,我的程序就会无限打印“enter int values:”。我不确定我做错了什么,因为一旦 x == EOF,它应该会跳出循环。

我该何去何从?

#include <stdio.h>
#include <stdlib.h>

struct Node {
    int data;
    struct Node *next;
};

void insertNode(struct Node **startRef, int data);
void insertNode(struct Node **startRef, int data){
    struct Node *ptr1 = (struct Node*)malloc(sizeof(struct Node));
    ptr1->data = data;
    ptr1->next = *startRef;
    *startRef = ptr1;
}

int main(){
    int vals;
    struct node *start = NULL;

    for(;;){
        int x = &vals;
        if(x==EOF){
            break;
        }
        else{
            printf("enter int values: ");
            scanf("%d", vals);
            insertNode(&start,vals);
        }
    }
}
C 链表 SCANF 节点 EOF

评论

1赞 Weather Vane 11/15/2020
请使用 address-of: but the compiler won't like Also why would the input value be ?这似乎有点混乱。有很多读取值的例子可以找到。&scanf("%d", &vals);int x = &vals;EOFint
1赞 chux - Reinstate Monica 11/15/2020
节省时间,启用所有编译器警告:应发出警告。int vals; ... scanf("%d", vals);
0赞 Andrew Henle 11/15/2020
你需要检查返回值,以确保它确实读取了一些输入 - 否则当它卡住时,你会无限循环。scanf()
0赞 Jonathan Leffler 11/15/2020
用:。如果你也想要提示,请使用循环条件 - 报告它写了多少个字符,这样你就可以用它来测试是否成功。您可以改用逗号运算符将 the 与 和 test 分开。请注意,如果返回 0,则表示存在问题 — 可能是输入流中的非数字、非空格字符。while (scanf("%d", &vals) == 1) insertNode(&start, vals);while (printf("enter an integer: ") > 0 && scanf("%d", &vals) == 1)printf()printf()printf()scanf()scanf()

答: 暂无答案