gpt4 book ai didi

使用scanf时C程序意外无限循环

转载 作者:太空宇宙 更新时间:2023-11-04 00:13:30 25 4
gpt4 key购买 nike

我到处检查,并浪费了大约 3 个小时来寻找解决方案。我的程序只是无限循环本身。这是我的 C 程序:

#include <stdio.h>
#include <string.h>

int main (void)

{
int attempts = 0;
char password[10];

do
{
printf("Enter your password:\n");
scanf("%[^\n]s", password);
printf("\n");
attempts++;
} while (strcmp(password, "awesome 123 ok"));

printf("You entered a correct password in %d attempts!", attempts);

return 0;
}

我试过 scanf("%[A-Za-z0-9 ]s", password)" 所以它可以接受所有字符和数字,包括空格作为输入,但它只是循环。和我也尝试使用 getchar() 但它会一次又一次地询问密码,即使我输入了正确的密码。任何帮助将不胜感激。

最佳答案

awesome 123 ok 的大小为 15,包括 \0。但是您正在为 10 个字节分配内存。它会导致未定义的行为。

当您使用 %[^\n] 格式说明符时,无需使用 s,它也会自动扫描空格。

尝试以下更改-

int main (void)

{
int attempts = 0;
char password[20]; // Fix 1

do
{
printf("Enter your password:\n");
scanf("%[^\n]", password); // Fix 2
printf("\n");
attempts++;
} while (strcmp(password, "awesome 123 ok"));

printf("You entered a correct password in %d attempts!", attempts);

return 0;
}

关于使用scanf时C程序意外无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25301160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com