我想要输入多个printfs,但我没有机会进入。 我只能输入1,但之后它只是结束了programme.I尝试了do虽然但它没有工作
int main()
{
int number;
char username[30]="";
char fullName[30]="";
char password[30]="";
printf("Do you want to log in(1) or register (2)? \n");
scanf("%d",&number);
if (number==2)
{
printf("username : ");
scanf("%s",&username);
printf("Full name : ");
scanf("%s",&fullName);
printf("Password : ");
scanf("%s",&password);
printf("Repeat password : ");
scanf("%s",&password);
}
return 0;
}
答案 0 :(得分:1)
使用fgets()
将完整行读入适当大的缓冲区,然后解析。
请注意%s
将停在第一个空白字符处,因此全名“Mr X”将在输入缓冲区中留下“X”,抓取密码等等。这真的不是一种获取输入的强大方式。
答案 1 :(得分:1)
我只能输入1,但之后它只会结束程序。
当然,代码有if (number==2)
@Scadge
如果您输入"2"
,请考虑以下事项:
scanf("%s",&fullname);
不会将空格或其他空格分隔到fullname
。输入“John Doe”等全名会将"John"
保存到fullname
,将"Doe"
保存到password
。
避免使用scanf()
。
不是使用scanf()
来读取用户输入,而是使用fgets()
读取用户输入。对于可以处理各种输入问题的辅助函数来说,这是一个很好的机会。
int read_int(const char *prompt) {
if (prompt) fputs(prompt, stdout);
fflush(stdout); // insure output is written before asking for input
char buffer[40];
if (fgets(buffer, sizeof buffer, stdin) == NULL) {
return NULL;
}
int i;
if (sscanf(buffer, "%d", &i) == 1) {
return i;
}
// TBD - what should code do if invalid data entered. Try again?
}
char *read_line(char *dest, sizeof size, const char *prompt) {
if (prompt) fputs(prompt, stdout);
fflush(stdout); // insure output is written before asking for input
char buffer[size * 2 + 1]; // form buffer at _least 1 larger for \n
if (fgets(buffer, sizeof buffer, stdin) == NULL) {
return NULL;
}
size_t len = strlen(buffer);
if (len > 0 && buffer[len-1] == '\n') buffer[--len] = '\0';
if (len >= size) {
// input too big - how do you want to handle this?
TBD_Code();
}
return strcpy(dest, buffer);
}
现在使用这两个辅助函数来清理用户输入
// printf("Do you want to log in(1) or register (2)? \n");
// scanf("%d",&number);
number = read_int("Do you want to log in(1) or register (2)? \n");
...
// printf("username : ");
// scanf("%s",&username);
read_line(username, sizeof username, "username : ");
// printf("Full name : ");
// scanf("%s",&fullName);
read_line(fullName, sizeof fullName, "fullName : ");
可以添加其他代码来检查文件结尾,超长行,int
范围测试等。
答案 2 :(得分:0)
使用c库函数fgets()。
[b]