|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
下面的select函数的第34行会有警告:control reaches end of non-void function [-Wreturn-type]。怎样可以避免这个警告呢?
- #include <stdio.h>
- typedef int (*PTR_TO_FUN)(int, int);
- int add(int, int);
- int sub(int, int);
- int calculate(PTR_TO_FUN, int, int);
- PTR_TO_FUN select(char);
- int add(int x, int y)
- {
- return x + y;
- }
- int sub(int x, int y)
- {
- return x - y;
- }
- int calculate(PTR_TO_FUN fun, int x, int y)
- {
- return fun(x, y);
- }
- int (*select(char ch))(int, int)
- {
- switch (ch)
- {
- case '+':
- return add;
- case '-':
- return sub;
- }
- }
- int main(void)
- {
- int num1, num2;
- char op;
- PTR_TO_FUN fp;
- printf("请输入一个式子(如:1+2):");
- scanf("%d%c%d", &num1, &op, &num2);
- fp = select(op);
- printf("%d %c %d = %d", num1, op, num2, calculate(fp, num1, num2));
- return 0;
- }
复制代码
如果输入的不是"+"或"-",我们可以在`select`函数中设置一个默认的处理逻辑。例如,你可以返回一个空函数,即一个什么都不做的函数,这样程序就可以继续执行而不会停止。为了实现这个逻辑,我们可以定义一个空函数`empty`,并将其作为默认情况下的返回值。然后在`calculate`函数中,我们可以加入一个判断,如果函数指针为空,则返回0,这样就不会出现异常情况了。以下是修改后的代码:
- #include <stdio.h>
- typedef int (*PTR_TO_FUN)(int, int);
- int add(int, int);
- int sub(int, int);
- int calculate(PTR_TO_FUN, int, int);
- PTR_TO_FUN select(char);
- int add(int x, int y){
- return x + y;
- }
- int sub(int x, int y){
- return x - y;
- }
- int calculate(PTR_TO_FUN fun, int x, int y){
- if (fun != NULL) {
- return fun(x, y);
- } else {
- printf("输入了无效的操作符!\n");
- return 0;
- }
- }
- PTR_TO_FUN select(char ch){
- switch (ch){
- case '+':
- return add;
- case '-':
- return sub;
- default:
- printf("输入了无效的操作符!\n");
- return NULL;
- }
- }
- int main(void){
- int num1, num2;
- char op;
- PTR_TO_FUN fp;
- printf("请输入一个式子(如:1+2):");
- scanf("%d%c%d", &num1, &op, &num2);
- fp = select(op);
- printf("%d %c %d = %d\n", num1, op, num2, calculate(fp, num1, num2));
- return 0;
- }
复制代码
现在,当输入了无效的操作符时,程序会打印出相应的提示信息,并返回0。这样就避免了程序直接停止的情况。请注意,在输入了无效操作符时,输出的结果值为0,这是因为我们在`calculate`函数中设置的默认返回值。你也可以根据实际需求对这部分逻辑进行修改。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|