我想创建一个程序,将Roll No和Full name作为输入并简单地显示它 我的代码是。此代码通过获取函数跳过n的扫描值。为什么会出现这种错误以及如何解决这个错误?
#include<stdio.h>
#include<conio.h>
void main()
{
int r;
char n[30];
printf("enter your roll no");
scanf("%d",&r);
printf("enter your full name");
gets(n);
printf("roll no is %d ",r);
printf("name is %s ",n);
getch();
}
而下面的代码扫描第一个获取值并跳过第二个。
#include<stdio.h>
#include<conio.h>
void main()
{
int r;
char n[30], f[30];
printf("enter your roll no");
scanf("%d",&r);
printf("enter your full name");
gets(n);
printf("enter your full name of your father ");
gets(f);
printf("roll no is %d ",r);
printf("name is %s ",n);
printf("father name is %s ",f);
getch();
}
答案 0 :(得分:2)
问题的简单解决方案是在fflush(stdin);
和scanf();
之间添加gets();
#include<stdio.h>
#include<conio.h>
void main()
{
int r;
char n[30],fn[30];
clrscr();
printf("\nEnter roll ");
scanf("%d",&r);
fflush(stdin);
printf("\nEnter name ");
gets(n);
printf("\nEnter father name ");
gets(fn);
printf("\n\nRoll %d",r);
printf("\nname %s",n);
printf("\nfather name %s",fn);
getch();
}
答案 1 :(得分:1)
使用scanf
代替gets
将解决您的问题:
scanf("%s", n); // Read in your name
请注意,在读取此类字符串时,应使用传递字符串长度的安全函数(例如来自MSDN的scanf_s)。
答案 2 :(得分:1)
代码不会跳过扫描'n'的值。 我相信当你运行程序时,你输入Roll No然后按键盘上的 ENTER 键。 这是原因。 只要按 ENTER 键,转义序列'\ n'就会保存在数组 n 中。 gets()命令正在执行。
在第二种情况下,变量'n'存储转义序列,下一个变量'f'获取您接下来输入的字符串。
要使代码正常工作,只需输入您的scanf语句,如下所示: -
scanf("%d ",&r);
注意%d之后的空格。
试试这段代码 -
#include<stdio.h>
int main(void)
{
int r;
char n[30], f[30];
printf("Enter your roll no");
scanf("%d ",&r); // I have inserted a space after %d
printf("Enter your full name");
gets(n);
printf("Enter your full name of your father ");
gets(f);
printf("\nRoll no is %d ",r);
printf("\nName is %s ",n);
printf("\nFather name is %s ",f);
return 0;
}
提示: - 你必须尽量不要使用gets()和puts()
答案 3 :(得分:0)
我不知道为什么会被跳过,但你可以做些什么来避免任何其他混淆,如fflush(stdin)或fgets等等。
在下一行使用gets(string)。因此,当它跳过第一个获取命令时,它会转到另一个命令。
试试吧 干杯, ;)
答案 4 :(得分:0)
两个小时前我遇到了同样的问题,但是要轻松解决这种情况,您要做的就是在“ getchar()"
”之后和“ {{ 1}}”,这样多余的“ scanf()
”将转到“ gets()
”,您可以在下一个“ \n
”中键入所需的内容。
答案 5 :(得分:-1)
我也遇到了上面提到的同样的问题..所以在这里提到的答案的帮助下,使用命中和试用方法,我发现当我们使用scanf()
输入任何变量后按Enter键,\n
存储在下一个gets()
函数中..下次它不接受来自键盘的任何输入..所以为了避免这种情况,只需在{{之间使用getchar()
1}} nd scanf()
nd还记得gets()
只占用1个字符..所以不要再向getchar()
提供任何额外的输入,因为这将被存储并将用于{ {1}}问题将保持不变......
希望这会有所帮助..
谢谢你..