gpt4 book ai didi

c - 为什么 c 中的整型变量在将字符值传递给它后会打印其旧值?

转载 作者:行者123 更新时间:2023-11-30 19:57:08 25 4
gpt4 key购买 nike

在用 c 构建堆栈程序时,我发现了一些奇怪的东西(不是对每个人来说,而是对使用网络技术的人来说)。我使用了一个选择变量(整数类型)并操纵一个开关。这发生在一个循环中,如下面的代码片段所示。

do {
printf("\n\tEnter your choice for the operation: ");
scanf("%d", &choice);
getchar();
printf("%d", choice);
switch (choice)
{
case 1:
{
printf("\n\tEnter the token to be inserted:");
token = getchar();
push(token);
show();
break;
}
case 2:
{
token = pop();
if (TOP > -1)
printf("\n\tThe token deleted is %c", token);
show();
break;
}
case 3:
{
show();
break;
}
default:
printf("\n\tWrong choice");
getchar();
}
printf("\n\tDo you want to continue(y/n): ");
ch = getchar();
} while (ch == 'y' || ch == 'Y');

假设您正在运行这样的测试用例 Sample Test Case在第二次迭代中,当我将选项作为字符传递时,为什么选项使用其旧值 2?

最佳答案

scanf 中的

格式%d 接受(使用)以十进制表示法表示整数的字符序列。如果您输入的字符与所需的格式不匹配,scanf 会失败并返回而不修改收件人变量。这就是你的案例中发生的情况。 i 不是 %d 格式的有效输入。 scanf 立即失败,choice 保留其旧值。

关于c - 为什么 c 中的整型变量在将字符值传递给它后会打印其旧值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53450390/

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