为什么在C代码中,当除了输入的字母外没有任何变化时,GET和puts的行为会有所不同?

为什么在C代码中,当除了输入的字母外没有任何变化时,GET和puts的行为会有所不同?,c,bash,gdb,gets,puts,C,Bash,Gdb,Gets,Puts,嘿,小伙子们(和姑娘们), 我一直在努力理解这一点。我甚至接触过gdb,无法理解它。所以,我得麻烦你们中的一个。我有一个简单的菜单,每个选项都是一个整数,从1到12,像平常一样单调递增。好吧,我试着对它进行编码,如果你选择,比如说,五(5),它从那里开始,然后通过询问姓名、年龄等继续迭代。这是作业,所以请不要告诉我怎么做。我需要知道的是,对于选项1,我使用的是if语句,if语句以这些行开头 printf("Enter Name: \n"); gets(name); pri

嘿,小伙子们(和姑娘们), 我一直在努力理解这一点。我甚至接触过gdb,无法理解它。所以,我得麻烦你们中的一个。我有一个简单的菜单,每个选项都是一个整数,从1到12,像平常一样单调递增。好吧,我试着对它进行编码,如果你选择,比如说,五(5),它从那里开始,然后通过询问姓名、年龄等继续迭代。这是作业,所以请不要告诉我怎么做。我需要知道的是,对于选项1,我使用的是if语句,if语句以这些行开头

    printf("Enter Name: \n");
    gets(name);
    printf("Name: ");
    puts(name);
    printf("\n");
此代码完全按照预期工作。然后,在语句的后面,在做了一些相同类型的事情之后,除了之前在块中使用scanf作为float之外。我有这个密码

    printf("Enter Major: \n");
    gets(major);
    printf("Major: ");
    printf("\n");
此代码不会等待任何输入。它只是在下一行打印出Major:然后Major:再打印一次。我不明白。我用gdb进行了一步,它在步进时工作正常。然后,当我运行它时,同样的事情再次发生。有人能告诉我发生了什么事吗?事先非常感谢您的帮助。我知道这里的绝大多数人都是专业人士,不想被这么简单的事情打扰,但我就是找不到答案,我的教授今天已经离开了。谢谢各位-法庭

也许我应该在有问题的代码之前给你们代码。正是这一点,正如预期的那样。。。 printf(“输入高度:\n”); 扫描频率(“%f”和高度); printf(“高度:%f2.1.”,高度); 所涉及的变量声明为。。。字符名[25],少校[25];和浮动高度。再次感谢

除了之前在块中使用scanf作为浮动之外

是解决你问题的关键。如果执行
scanf(“%f”,&var)
,并输入以换行符结尾的数字,scanf将不会读取换行符。尝试为您的浮动输入“123abcd”,您将看到abcd将被填充到主要字符中

使用<代码> SCANF(“%F”,和var)< /> >跳过您的数字后面的任何潜在空白(注意格式字符串中的空白)。

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

除了之前在块中使用scanf作为浮动之外

是解决你问题的关键。如果执行
scanf(“%f”,&var)
,并输入以换行符结尾的数字,scanf将不会读取换行符。尝试为您的浮动输入“123abcd”,您将看到abcd将被填充到主要字符中

使用<代码> SCANF(“%F”,和var)< /> >跳过您的数字后面的任何潜在空白(注意格式字符串中的空白)。

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

除了之前在块中使用scanf作为浮动之外

是解决你问题的关键。如果执行
scanf(“%f”,&var)
,并输入以换行符结尾的数字,scanf将不会读取换行符。尝试为您的浮动输入“123abcd”,您将看到abcd将被填充到主要字符中

使用<代码> SCANF(“%F”,和var)< /> >跳过您的数字后面的任何潜在空白(注意格式字符串中的空白)。

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

除了之前在块中使用scanf作为浮动之外

是解决你问题的关键。如果执行
scanf(“%f”,&var)
,并输入以换行符结尾的数字,scanf将不会读取换行符。尝试为您的浮动输入“123abcd”,您将看到abcd将被填充到主要字符中

使用<代码> SCANF(“%F”,和var)< /> >跳过您的数字后面的任何潜在空白(注意格式字符串中的空白)。


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

永远不要使用
gets()
。切勿使用
get()
。它不可能安全地使用..而且也不要使用
scanf()
,它的行为很奇怪且不一致,尤其是在空格方面。使用
fgets()
strod()
代替。切勿使用
gets()
。切勿使用
get()
。它不可能安全地使用..而且也不要使用
scanf()
,它的行为很奇怪且不一致,尤其是在空格方面。使用
fgets()
strod()
代替。切勿使用
gets()
。切勿使用
get()
。它不可能安全地使用..而且也不要使用
scanf()
,它的行为很奇怪且不一致,尤其是在空格方面。使用
fgets()
strod()
代替。切勿使用
gets()
。切勿使用
get()
。它不可能安全地使用..而且也不要使用
scanf()
,它的行为很奇怪且不一致,尤其是在空格方面。改用
fgets()
strod()
。是的,先生。但是,如果没有scanf,我将无法编写代码。我应该用什么来代替呢?如果出于某种原因,您不能使用H2CO3的
fgets/strtod
组合,请使用
%f”
作为您的格式字符串,正如我所说的。是的,先生,它确实添加了该字符串。我认为get和put比scanf更有效。这就是我使用它的原因。这是一门系统工程课。但是,我再也不会了。所以,我用scanf来保存字符串?我明白了,我现在明白了。非常感谢你们!还有,很抱歉打扰您。@法庭不必担心“效率”。为什么要麻烦?直到你是一个初学者,你不能