【问题标题】:C - Single Linked List: problems with scanf and pointers [closed]C - 单链表:scanf 和指针的问题 [关闭]
【发布时间】:2018-02-27 06:56:52
【问题描述】:

好吧,这将是一个非常糟糕的问题,我不知道如何用 scanf 分配浮点数:

float get_value(float * ptr){

printf("Immettere valore: ");
scanf("%f", &(*ptr)); //THE ERROR IS HERE 

return *ptr; }

真的不知道在这里做什么。 (错误在代码中) 这是另一个感兴趣的部分:

...        switch (ch) {
        case 1: *value = get_value(value);
            break;
        case 2: pre_insert(&listA, value);
            break;
        case 3: pre_insert(&listB, value);
            break;
        case 4: end_insert(&listA, value);
            break;
        case 5: end_insert(&listB, value);
            break;

        default: printf("\nComando non valido.\n");
            break;
    }

}...

函数原型: float get_value(float*);

【问题讨论】:

标签: c pointers linked-list scanf


【解决方案1】:

你差不多了,你只是太努力了

float get_value(float * ptr){

    printf("Immettere valore: ");
    scanf("%f", ptr); //THE ERROR IS HERE 

    return *ptr;
}

scanf() 需要一个指针来读取浮点数,而ptr 已经是这样了。

而且,您应该真正选择一种返回值的方法,无论是在pass-by-reference 参数中,还是通过return,您通常都不需要这两种方法。也一样

float get_value() {
    float num;
    printf("Immettere valore: ");
    scanf("%f", &num); //THE ERROR IS HERE 

    return num;
}

float value = get_value();

void get_value2(float *ptr) {
    printf("Immettere valore: ");
    scanf("%f", ptr); //THE ERROR IS HERE 
}

float value;
get_value2(&value);

Some Programmer Dude 说得很好,不知道您在尝试使用返回值时是否有错误?

case 1: *value = get_value(value);

在我看来有点可疑,除非 value 真的是 float *value

【讨论】:

  • 虽然这是个好建议,但它不是“错误”,甚至不是错误。在&(*ptr) 中,& 的地址和取消引用* 运算符只是相互抵消。 &(*ptr)ptr 的表达式是一样的。
猜你喜欢
  • 2011-05-16
  • 2012-09-26
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2016-11-09
  • 2021-12-29
相关资源
最近更新 更多