gpt4 book ai didi

c - Visual Studio 2015 上的 scanf

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

void loginForm() {
char username[100], password[100];
printf("Username: ");
scanf("%[^\n]", username);
printf("%s", username);
printf("Password: ");
scanf("%[^\n]", password);
printf("%s", password);
}

我在 VS2015 中遇到此代码的问题,每次我输入我的用户名时它都会造成严重破坏,如下所示:

Username: Tenzo
Password: Tenzo╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠Tenzo

我很困惑,因为在代码中,我想在要求用户输入密码之前先打印“用户名”,但如您所见,我什至没有输入任何密码,但您可以看到它已经看起来像那样了。在 VS2010 上测试了代码,一切正常。我不知道发生了什么。

注意:代码是用 C 而不是 C++ 编写的。

最佳答案

问题在于 "%[^\n]" 格式说明符会将换行符留在输入缓冲区中。以下 scanf 不会跳过该换行符,因为 %[] 格式说明符默认情况下不会跳过前导空格。 (相比之下,大多数格式说明符,如 %s%d%f 确实跳过空格默认。)

要解决这个问题,可以在格式化字符串的开头加一个空格,像这样

scanf(" %[^\n]", password);
^ this space forces scanf to skip any leading whitespace, including newlines

关于c - Visual Studio 2015 上的 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40927809/

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