将用户输入存储到C中



我有一个C初学者类的任务:我应该创建一个有一个变量(命名值)和一个指向列表的指针的结构。我应该提示用户输入5个值,并将它们存储在链接列表中。然后打印出列表。我不知道如何将输入存储到列表中。我确实写了一个程序,初始化了5个值。但我不知道如何接受输入并将其存储到列表中。

这是我初始化值的工作程序:

#include <stdio.h>
struct list
{
    double value;
    struct list *nextVal;
};
int main()
{
    struct list v1 = {10};
    struct list v2 = {17.97};
    struct list v3 = {166};
    struct list v4 = {2};
    struct list v5 = {387.55};
    struct list *first;
    first = &v1;
    v1.nextVal = &v2;
    v2.nextVal = &v3;
    v3.nextVal = &v4;
    v4.nextVal = &v5;
    v5.nextVal = NULL;
    printf("All the values are: %.2f, %.2f, %.2f, %.2f, %.2f.",
    first->value,v1.nextVal->value,v2.nextVal->value,
    v3.nextVal->value,v4.nextVal->value);
    return 0;
}

这里有一个程序,我尝试获取用户输入并将其存储到列表中。(我只有2个值,而不是5,因为当我试图使它工作时,使用它更容易。)当我编译这个程序时,我没有错误。当我运行它时,会正确地提示我输入两个输入值;但是,当程序打印的输出只为两个值写入0时。我的假设是,我把值存储在列表中是错误的——因为我不知道它实际上是如何做到的。(在我的课本或网上找不到任何信息。)昨晚有人评论了另一个问题,我不得不尝试使用断点来找出问题的确切位置——从那以后我一直在努力找出它,但还不知道如何做到这一点。(我认为这是一件非常简单的事情,但无论我在网上看到哪里,人们都会以一种似乎我应该知道他们在说什么的方式来解释它,但我没有。老实说,即使我能弄清楚,我仍然不知道该如何处理这些信息,因为我找不到任何关于如何将用户输入存储到链接列表中的信息。)无论如何,所以这是我的试用程序,它符合并运行,但两个最终值都为0:

#include <stdio.h>
struct list
{
    double value;
    struct list *nextVal;
};
int main()
{
    double val1,val2;
    printf("Please enter a number: ");
    scanf("%f",&val1);
    printf("Please enter a number: ");
    scanf("%f",&val2);
    struct list v1 = {val1};
    struct list v2 = {val2};
    struct list *first;
    first = &v1;
    v1.nextVal = &v2;
    v2.nextVal = NULL;
    printf("The two values entered are %.2f and %.2f.",
    first->value,v1.nextVal->value);
    return 0;
}

提前谢谢!我真的是一个初学者,所以即使你建议一些超级简单的东西,我也可能不知道它是什么…所以请解释一下!非常感谢。

scanf("%f",&val1);

CCD_ 1需要CCD_ 2变量,但给定的变量是CCD_。将%lf用于double

scanf("%lf",&val1);

你的编译器应该给你一个警告,你应该时刻注意并解决它们:

warning: format ‘%f’ expects argument of type ‘float *’, but argument 2 has type ‘double *’ [-Wformat=]
 scanf("%f",&val1);

一些额外的建议,尽管它们并没有直接解决你的问题:

  • 始终检查函数返回值。具体来说,检查scanf以确保已解析预期的输入。如果用户输入了意外的内容,则代码将失败
  • 将代码分解为函数。具体来说,制作一个单独的insert函数,将项目添加到链表中
  • 在需要重复代码的地方使用循环。例如用于scanf呼叫。这样,当你想接受更多的输入时,它可以很容易地扩展

尝试在等上使用警告进行编译。至少我使用这个。。。

gcc -Wall -pedantic -std=c11

工作版本

include <stdio.h>
struct list
{
  double value;
  struct list *nextVal;
};
int main()
{
  double val1,val2;
  printf("Please enter a number: ");
  scanf("%lf",&val1);
  printf("Please enter a number: ");
  scanf("%lf",&val2);
  struct list v1 = {val1};
  struct list v2 = {val2};
  struct list *first;
  first = &v1;
  v1.nextVal = &v2;
  v2.nextVal = NULL;
  printf("The two values entered are %.2f and %.2f.",
      first->value,v1.nextVal->value);
  return 0;
}

您正在扫描引号,并试图将其分配给一个双引号。一个好的编译器会给你一个警告。。

scanf.c:14:14: warning: format specifies type 'float *' but the argument has type 'double *' [-Wformat]
  scanf("%f",&val1);
         ~~  ^~~~~
         %lf
scanf.c:16:14: warning: format specifies type 'float *' but the argument has type 'double *' [-Wformat]
  scanf("%f",&val2);
         ~~  ^~~~~
         %lf

相关内容

  • 没有找到相关文章

最新更新