此问题在此处已有答案:
scanf("%[^\n]s",a) with set size of string(2个答案)
10天前关闭。
嘿伙计们,
我刚开始学习C语言,我的代码遇到了一个问题,我试图做一个简单的程序,它将接受输入(名称,密码)并将其附加到一个文件中。
int main()
{
printf("1. Register\n");
printf("2. Login\n");
printf("Please enter your choice: ");
int choice;
FILE *file = fopen("data.txt", "a");
if (file == NULL)
printf("File cannot be oppened");
char *name = (char *)malloc(sizeof(char[64]));
if (name == NULL)
printf("name malloc failed");
char *password = (char *)malloc(64 * sizeof(char));
if (password == NULL)
printf("password malloc failed");
char *userInput = (char *)malloc(1024 * sizeof *userInput);
if (userInput == NULL)
printf("userInput malloc failed");
scanf("%d", &choice);
if (choice == 1)
{
printf("Enter username: ");
fscanf(stdin, "%[^\n]s\n", name);
fprintf(file, "%s\n", name);
printf("Enter password: ");
//check if there's any spaces
fscanf(stdin, "%[^\n]s\n", password);
fprintf(file, "%s\n", password);
}
return 0;
}
问题是当我想检查密码或名称是否包含任何空格时,编译不会给予我任何错误,但它只会打印“输入用户名”和“输入密码”,然后退出程序,如果我不使用此检查,程序将相应地工作。
我尝试检查时的输出:
1.注册
1.登录
请输入您的选择:1
用户名:输入密码:
你能告诉我我哪里做错了吗
1条答案
按热度按时间ukqbszuj1#
你不应该malloc一个你应该使用的数组的大小
同样,当您检查malloc或文件是否为
NULL
时,如果失败,则应返回以停止程序。另外,正如@user3121023所说,您应该将
"%[^\n]s\n"
更改为" %[^\n]"
,并在开始时添加空格。