You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编程作业中函数返回类型修改的正确性咨询(附代码)

关于C语言函数返回类型的疑问解答

我的编程作业收到老师评语:
"函数no_special_characters的返回类型为int但未编写任何return语句;若函数无需返回值,有专门的返回类型可用。函数to_lower返回0,但调用该函数时并未接收此返回值,该函数是否真的需要返回值?除此之外,解决方案运行正常。"
我已经将这两个函数的返回类型改为void,移除了return语句,程序仍能正常运行,想确认这样修改是否正确?

以下是修改后的代码:

#include<stdio.h>
#define SIZE 1000
#include <ctype.h>
#include<string.h>

// 检查是否为回文的函数
int isPalindrome(char inputString[]) {
    int l = 0;
    int r = strlen(inputString) - 1;

    while (r > l)
    {
        // 检查所有字符是否对称相等
        if (inputString[l++] != inputString[r--]) {
            return 0;
        }// 不是回文则返回0
    }

    return 1;
}

// 过滤非字母字符的函数
void no_special_characters(char inputString[],char outputstring[])
{
    int temp_index = 0;
    int abc = 0;
    int r = strlen(inputString);
    for (int i = 0; i < r; i++)
    {
        char abc = inputString[i];
        if (isalpha(abc) != 0)
        {
            outputstring[temp_index++] = abc;
        }
    }
    outputstring[temp_index] = '\0';
}

// 将大写字母转为小写的函数
void to_lower(char inputstring[]) {
    int length = strlen(inputstring);
    for (int i = 0; i < length; i++)
    {
        if (isupper(inputstring[i]))
            inputstring[i] = tolower(inputstring[i]);
    }
}

int main(void) {
    int end_run = 0;
    int try_again = 1;

    while (try_again == 1) {
        char inputString[SIZE] = "";
        char outputstring[SIZE] = "";

        printf("Enter a string to check if it is a palindrome!\n");
        // 读取输入字符串
        gets_s(inputString, SIZE);

        printf("input: %s\n", inputString);
        to_lower(inputString);
        printf("lower: %s\n", inputString);
        no_special_characters(inputString, outputstring);
        printf("speci: %s\n", outputstring); // 不输出空格
        // 将字符串传入isPalindrome函数,返回1则执行if分支,否则执行else
        if (isPalindrome(outputstring)) {
            printf("That is a palindrome!\n");
        }
        else {
            printf("This is not a palindrome!\n");
        }

        printf("Do you want to try again: 1 for yes 0 for No?");
        scanf_s("%d", &try_again);
        while(getchar()!='\n');

        // 根据用户选择决定是否继续运行
        if (try_again != 1) {
            end_run = 0;
        }
    }   
    return 0;
}

解答

你的修改完全正确,原因如下:

  • no_special_characters函数:原版本返回类型设为int却没有写return语句,这属于C语言的未定义行为,程序可能偶然运行但存在潜在风险。改为void类型后,明确告知编译器和阅读代码的人:这个函数只负责处理字符串并写入输出数组,不需要返回任何值,完全匹配它的功能定位。
  • to_lower函数:原版本返回0,但调用它的地方根本没有接收这个返回值,说明这个返回值完全是冗余的。改为void类型后,既符合它的功能(直接修改传入的字符串内容),也消除了无用的返回逻辑,让代码逻辑更清晰。

从你修改后的程序运行正常的结果来看,这种修改完全符合老师的建议,是正确的做法。

内容的提问来源于stack exchange,提问作者hacker2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:45:41