任何人都可以帮我纠正我的代码有什么问题? int以滑稽的方式表现,因为它跳过而不是让我输入数字。谢谢大家。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* input_text(const char* question)
{
char* v = (char*)malloc(256);
printf("%s ", question);
if(fgets(v, 255, stdin) == NULL){
free(v);
return(NULL);
}
int len = strlen(v);
if (len > 0 && v[len-1] == '\n'){
v[len-1] = 0;
}
return(v);
}
int input_number(const char* question)
{
int k = 0;
printf("%s", question);
scanf("%d", &k);
return(k);
}
//---------------------------------------------------------------------------------------------------------------------------
int main()
{
char* name = input_text("What is your name? ");
int age = input_number("What is your age? ");
char* bday = input_text("When is your birthday? ");
char* bstfriend = input_text("What is the name of your bestfriend? ");
printf("\n");
printf("Your name is %s \n", name);
printf("Your age is %d \n", age);
printf("Your birthday is %s \n", bday);
printf("Your bestfriend is %s \n", bstfriend);
return(0);
}
同样重新安排它是不可能的,因为它是专门指示这样做的。
答案 0 :(得分:2)
input_number()
函数在输入年龄后在输入流中留下换行符。最简单的解决方法是在getchar()
scanf()
之后添加input_number()
以消耗不需要的换行符:
int input_number(const char* question)
{
int k = 0;
printf("%s", question);
scanf("%d", &k);
getchar();
return(k);
}
或者,您可以编写一个函数来清除输入流:
void clear_input(void)
{
int c;
while((c = getchar()) != '\n' && c != EOF) {
continue;
}
}
...
int input_number(const char* question)
{
int k = 0;
printf("%s", question);
scanf("%d", &k);
clear_input();
return(k);
}
由于scanf()
在输入流中留下了新行,因此fgets()
和scanf()
函数始终可以很好地协同工作,因此通常最好坚持使用{{} 1}}。您可以使用fgets()
来解析输入,然后不需要清除输入流(除非用户输入的输入多于缓冲区将保留的输入;然后需要处理额外的字符):
sscanf()