编程作业中函数返回类型修改的正确性咨询(附代码)
关于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
相关产品推荐
相关产品推荐

