这是一个简单的菜单。提示用户选择0到3之间的数字。运行此时,如果我在提示符处输入1,则输出“Hello2”,这是正确的。但是,在第9行,当它应该返回值1(输入的数字作为'type'变量存储时,它返回0.对于输入的任何值,它将返回0.有人可以告诉我我在哪里出错了谢谢。
#include <stdio.h>
int type;
int main(int argc)
{
int a = 7;
getInput();
printf("You selected: %d\n", type);
}
int getInput(type)
{
printf("\nPlease select an option:\n1)Create a record\n2)Display records\n
3)Update records\n4)Exit\n\n;");
scanf("%d", &type);
switch(type)
{
case 0:
printf("Hello\n");
break;
case 1:
printf("Hello2\n");
break;
case 2:
printf("Case3\n");
break;
case 3:
printf("Exit\n");
break;
default:
printf("\nERROR! Please select a valid number\n");
}
}
答案 0 :(得分:3)
首先,您的代码在现代C语言中无法编译。函数getType
未在调用时声明。 C语言不允许您调用未声明的函数。
也是这个
int getInput(type)
{
...
是旧的K&amp; R风格的函数定义,它依赖于&#34;隐式int
&#34;规则。现代C语言没有&#34;隐含int
&#34;规则不再,这就是你的代码无效的原因。
其次,如果编译器接受调用和K&amp; R风格的定义,它会将其接受为C89 / 90代码,参数类型默认为int
。您正在使用此本地参数int type
。它与全局变量type
没有任何关系,它永远保持0
。
第三,您的代码在许多其他方面被破坏了。您使用参数定义了函数getInput
,但是在没有任何参数的情况下调用它。这会导致未定义的行为。
第四,虽然C中没有立即出现错误,但您的getInput
被声明为返回int
,但您永远不会从中返回任何内容。
答案 1 :(得分:1)
您要修改的type
是getInput
中的局部变量。如果要修改全局参数,请删除函数参数:
int getInput(void) { .... }
还要确保从getInput
返回内容,或者返回void
类型的内容:
void getInput(void) { .... }
一个好的解决方案是删除全局变量并从函数返回type
。解决这个问题和其他问题:
int getInput(void)
{
int type = 0;
/*
as before
*/
return type;
}
#include <stdio.h>
int main(void)
{
int a = getInput();
printf("You selected: %d\n", a);
}
注意函数签名int getType(type)
在c89中具有隐式参数类型int
,但从c99开始无效。