gpt4 book ai didi

C 编程- Scanf 不工作。尝试添加空间,没用

转载 作者:行者123 更新时间:2023-11-30 21:38:45 27 4
gpt4 key购买 nike

int main(int argc, char *argv[]) {
int option;
char user[50];

system("COLOR b");

printf("~~~~~~~~~~~~~~~~ GLENMUIR HIGH SCHOOL LIBRARY MANAGEMENT SYSTEM ~~~~~~~~~~~~~~~~~~~~~~~ \n");
printf("Username:");
scanf("%c",&user);

checkPass();
printf("\n | Options Menu |\n");
printf(" | Check Out Book(1), Return Book(2) , Register(3), Admin Login (4) |\n");

printf("Option:");

scanf("%d",&option); /*compiler ignores this completely*/

我尝试在 %d 之前添加空格,但仍然不起作用。对于新手有什么解决方案吗?

最佳答案

您的问题源于此声明:

scanf("%c",&user);

%c 转换说明符仅从输入流中读取单个字符,而不是字符串。如果您输入像 jbode 这样的用户名,则只会从输入流中读取 'j' 字符 - 其余字符将由下一个 scanf(或其他输入)调用。

不幸的是,由于 %d 转换说明符,下一个 scanf 调用需要十进制数字序列; 'b' 不是十进制数字,因此您会遇到匹配失败 - 选项 未更新,'b' 不会从输入流中删除,并且 scanf 返回 0 表示未发生成功的转换。

正确的答案是根本不使用 scanf 读取用户名,而是使用 fgets:

if ( !fgets( user, sizeof user, stdin ) )
{
// EOF or error detected on input, handle as appropriate
}

checkPass();
...

如果您确实想使用 scanf,那么正确的方法是:

if ( scanf( "%49s", user ) != 1 ) // no & operator on user
{
// EOF or error detected on input, handle as appropriate
}

checkPass();
...

将字符串读入 char 数组时,不需要使用 & 运算符。 表达式 user 将从类型 char [50] 隐式转换(“衰减”)为 char *,结果指针值将是数组第一个元素的地址。

关于C 编程- Scanf 不工作。尝试添加空间,没用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47945541/

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