扫描 Visual Studio 2015
scanf on Visual Studio 2015
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
我很困惑,因为在代码中,我想在要求用户输入密码之前先打印 "Username",但如您所见,我什至没有输入任何密码但正如您所见,它已经看起来像那样了。
在 VS2010 上测试了代码,一切正常。我不知道发生了什么。
注意:代码是用 C 编写的,而不是 C++。
问题是 "%[^\n]"
格式说明符会将换行符留在输入缓冲区中。下面的 scanf
不会跳过该换行符,因为 %[]
格式说明符默认不会跳过前导白色 space。 (相比之下,大多数格式说明符,如 %s
、%d
和 %f
do 默认跳过 whitespace。)
为了解决这个问题,可以在格式化字符串的开头加上一个space,像这样
scanf(" %[^\n]", password);
^ this space forces scanf to skip any leading whitespace, including newlines
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
我很困惑,因为在代码中,我想在要求用户输入密码之前先打印 "Username",但如您所见,我什至没有输入任何密码但正如您所见,它已经看起来像那样了。 在 VS2010 上测试了代码,一切正常。我不知道发生了什么。
注意:代码是用 C 编写的,而不是 C++。
问题是 "%[^\n]"
格式说明符会将换行符留在输入缓冲区中。下面的 scanf
不会跳过该换行符,因为 %[]
格式说明符默认不会跳过前导白色 space。 (相比之下,大多数格式说明符,如 %s
、%d
和 %f
do 默认跳过 whitespace。)
为了解决这个问题,可以在格式化字符串的开头加上一个space,像这样
scanf(" %[^\n]", password);
^ this space forces scanf to skip any leading whitespace, including newlines