这是一个新手问题。我是C编程新手。我有以下代码,不提示输入“名称”,而是输入“年龄”,它绕过了“名称”部分。
#include <stdio.h>
int main()
{
char name[30],ch;
int age;
printf("Enter age : ");
scanf("%d", &age);
int i=0;
printf("Enter name: ");
while((ch = getchar())!='\n')
{
name[i]=ch;
i++;
}
name[i]='\0';
printf("Name: %s\n",name);
printf("Age : %d\n", age);
return 0;
}
阅读第一个提示后,它将绕过使用getchar()函数的第二个提示。但是,如果我更改提示顺序,先要求输入“名称”,然后要求“年龄”,则效果很好。
工作代码。
#include <stdio.h>
int main()
{
char name[30],ch;
int age;
int i=0;
printf("Enter name: ");
while((ch = getchar())!='\n')
{
name[i]=ch;
i++;
}
name[i]='\0';
printf("Enter age : ");
scanf("%d", &age);
printf("Name: %s\n",name);
printf("Age : %d\n", age);
return 0;
}
我的编码IDE是CodeBlock,我的编译器是GNU C编译器(mingw32-gcc.exe)
请帮助我突破。
对问题代码的一些改进/建议:
getchar()
为int
,因此的类型ch
也应为int
%s
来读取name
,这更容易,并且输入流中的前导空格也不成问题。代码的用户可能会给出一个包含超过30个字符的名称,并且此输入可能会使您的程序崩溃,因此您应该保护这种代码。您有两种选择:
一个。使用格式'%29s'来读取name
b。将的定义更改name
为char *name
,由读取scanf("%ms", &name);
,然后free(name);
在不再需要它时调用
这是一个示例,其中名称可以很长并且可以包含空格:
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
char *name;
int age;
printf("Enter name: ");
scanf("%m[^\n]", &name);
printf("Enter age: ");
scanf("%d", &age);
printf("Name: %s\n", name);
printf("Age : %d\n", age);
free(name);
exit(EXIT_SUCCESS);
}
这是它的运行方式:
$ ./a.out
Enter name: a very looooooooooooooooooooooooooooooooooooooooooooooong name
Enter age: 12
Name: a very looooooooooooooooooooooooooooooooooooooooooooooong name
Age : 12
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句