gpt4 book ai didi

c - 为什么 scanf 会让我的 switch 语句崩溃?

转载 作者:行者123 更新时间:2023-11-30 20:14:43 25 4
gpt4 key购买 nike

如果我从 case 语句中调用 scanf(),我似乎无法弄清楚为什么我的程序无法工作。

一切正常,直到我调用 scanf()。这是一个非常小的基于控制台的菜单。它读取刚刚输入的字符串并相应地向下移动菜单。一切正常,直到我在它应该响应的整数中尝试 scanf()

我首先认为返回一个值会破坏 Switch 语句...然后这不起作用,所以我放置了 break 语句以防万一。但它仍然不起作用。一旦 scanf() 没有被注释,整个序列就会变得困惑。

void main(void) {
char MenuS;
MenuS = 's';
while (MenuS != 'q') {
MenuS = Menu();
}
}

char Menu() {
unsigned char Menu;
unsigned char UserInput[9];
unsigned int Offset;
Offset = 0;
printf("\nEnt:");
gets(UserInput);
trim(UserInput);

if (UserInput[0] != 'q') {
switch (UserInput[0]) {
case 'r':
scanf("%d", &Offset);
printf("\nIn R");
return ('r');
break;
case 'w':
// printf("Is w");
printf("\nIn W");
return ('w');
break;
default:
printf("\nSomething else");
break;
}
} else {
return 'q';
}
}

最佳答案

我认为您遇到了问题,因为您声明了一个 unsigned int 变量,但在这里使用了错误的格式说明符:

scanf("%d", &Offset);

Offset 是一个无符号整型变量。

您必须使用 %u 表示无符号整数,而不是 %d

试试这个,这可能会解决问题:

scanf("%u", &Offset);

关于c - 为什么 scanf 会让我的 switch 语句崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25034298/

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