void loginForm() {
char username[100], password[100];
printf("Username: ");
scanf("%[^\n]", username);
printf("%s", username);
printf("Password: ");
scanf("%[^\n]", password);
printf("%s", password);
}
我已经遇到的问题与此代码在VS2015,在那里每次我输入自己的用户名,它只是继续肆虐,像这样:scanf函数上的Visual Studio 2015年
Username: Tenzo
Password: Tenzo╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠Tenzo
我很困惑,因为在代码中,我希望先打印“用户名”,然后要求用户输入密码,但正如你所看到的,我甚至没有输入任何密码,但你可以看到它已经看起来像这样。 测试了VS2010上的代码,一切正常。我不知道发生了什么。
注意:代码是用C编写的,而不是C++。
请在百分号前加空格:'“%[^ \ n]”'。另外,您不需要在'scanf'中的'username'和'password'前加上&符号。 – user3386109
哎呀,对不起,我没有注意到&符号。我删除了那个。哇,那可行!您可能想要使用答案模式回复更多关于发生的事情的信息,因为我不能将注释设置为答案:) – TenzoNakami
'scanf'函数停止读取空格符(如换行符)。输入缓冲区中的换行符不会被复制到您提供的缓冲区中。所以一个简单的''%99s''格式对于'scanf'调用应该足够了。事实上,使用''%[“'格式会导致问题,因为它不会跳过前导空格。所以第二个'scanf'调用将读取前一个调用的换行符。 –