0

嘿,伙计们(和女孩),我已经尝试并试图理解这一点。我什至已经通过 gdb 并且无法理解它。所以,我将不得不打扰你们中的一个人。我有一个简单的菜单,其中每个选项都是一个整数,从 1 到 12,像往常一样单调递增。好吧,我正在尝试对其进行编码,以便如果您选择五 (5),它从那里开始并通过询问姓名、年龄等来继续迭代。这是一个任务,所以请不要告诉我怎么做。我只需要知道选择号 1 我正在使用 if 语句,并且 if 语句以这些行开头......

    printf("Enter Name: \n");
    gets(name);
    printf("Name: ");
    puts(name);
    printf("\n");

此代码完全按预期工作。然后,在语句的后面,在做了一些相同类型的事情之后,除了在前面的块中使用 scanf 作为浮点数。我有这个代码...

    printf("Enter Major: \n");
    gets(major);
    printf("Major: ");
    printf("\n");

此代码不会等待任何输入。它只是在下一行再次打印出 Major: 然后 Major: 。我无法理解。我用 gdb 逐步完成,它在步进时工作正常。然后,当我运行它时,同样的事情再次发生。有人可以让我知道发生了什么吗?非常感谢您的帮助。我知道这里的绝大多数人都是专业人士,不在乎被这么简单的事情所困扰,但我就是找不到答案,我的教授已经离开了这一天。多谢你们。-法庭

也许我应该在有问题的代码之前给你们代码。就是这样,它按预期工作... printf("Enter Height: \n"); scanf("%f", &height); printf("高度: %f2.1.", height); 涉及的变量声明为... char name[25], major[25]; 和浮动高度。再次感谢。

4

1 回答 1

3

除了在之前的块中使用scanf作为浮点数

是你问题的关键。如果你这样做scanf("%f", &var),并输入一个以换行符结尾的数字,scanf 将不会读取换行符。尝试为您的浮点数输入“123abcd”,您会看到 abcd 将被塞进major。

用于scanf("%f ", &var)跳过号码后面的任何潜在空白(注意格式字符串中的空白)。

此外,您不应该使用gets,因为它可能会导致缓冲区溢出,但如果您刚刚开始学习,这可能不是您现在的主要问题。

于 2014-02-05T20:23:09.387 回答