C语言函数问题:调用含printf的函数时不想显示字符串长度
问题根源
你看到的“字符串长度”其实是printf函数的返回值——它表示成功输出的字符总数。你的代码在Entre函数的else分支返回了这个值,主函数又通过printf("%d", Entre(...))把它打印了出来,所以才会出现多余的数字。
解决方案
核心思路是:错误分支只负责打印提示信息,返回一个和正常输入范围不重叠的错误标记值,主函数根据返回值判断是否需要打印结果。
修改后的代码如下:
#include <stdio.h> int Entre(int x, int lim_inf, int lim_sup) { if (lim_inf <= x && x <= lim_sup) { return x; } else { printf("X não está entre lim_inf e lim_sup"); return -1; // 用-1作为错误标记,假设你的正常输入不会是负数 } } int main() // 遵循C标准,main函数返回类型为int { int numx, numinf, numsup; scanf("%d%d%d", &numx, &numinf, &numsup); int result = Entre(numx, numinf, numsup); if (result != -1) { printf("%d", result); // 仅正常情况打印返回值 } return 0; // 标准main函数需要返回0表示程序正常结束 }
其他说明
- 如果你的正常输入可能包含-1,可以换成其他不会出现在输入范围内的数值(比如
INT_MAX,需要包含<limits.h>头文件)作为错误标记。 - 如果你不需要主函数处理错误状态,也可以把
Entre函数的返回类型改成void,但这样正常情况下无法返回x,需要调整逻辑(比如通过指针参数传递结果)。
内容的提问来源于stack exchange,提问作者octogonalperson
相关产品推荐
相关产品推荐

