为什么在C代码中,当除了输入的字母外没有任何变化时,GET和puts的行为会有所不同?
嘿,小伙子们(和姑娘们), 我一直在努力理解这一点。我甚至接触过gdb,无法理解它。所以,我得麻烦你们中的一个。我有一个简单的菜单,每个选项都是一个整数,从1到12,像平常一样单调递增。好吧,我试着对它进行编码,如果你选择,比如说,五(5),它从那里开始,然后通过询问姓名、年龄等继续迭代。这是作业,所以请不要告诉我怎么做。我需要知道的是,对于选项1,我使用的是if语句,if语句以这些行开头为什么在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
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来保存字符串?我明白了,我现在明白了。非常感谢你们!还有,很抱歉打扰您。@法庭不必担心“效率”。为什么要麻烦?直到你是一个初学者,你不能