gpt4 book ai didi

c - 故意返回无效值或类型

转载 作者:太空狗 更新时间:2023-10-29 15:28:23 27 4
gpt4 key购买 nike

作为 Stephen Kochan 的“C 语言编程”(第 3 版)的建议练习,我想向 strToInt 函数添加一些功能,将字符串转换为整数。如果传递的字符串文字有效(如“123”或“13”),该函数有一个返回类型 int 就可以了。但如果字符串包含任何非数值(例如“12x3”、“foo”),则应打印错误消息并退出函数。由于返回类型是 int,因此需要返回一个整数,但在这种情况下这可能会产生误导。所以我的问题是,在这种情况下应该返回什么,以便返回的值/类型明确表示已传递了无效的字符串文字并且不会与有效的返回值混淆?

int strToInt(const char string[])
{
int i = 0, intValue, result = 0;

// check whether string passed is a valid literal
while (string[i] != '\0')
{
if (string[i] < '0' || string[i] > '9')
{
printf("ValueError: Invalid literal\n");
return; // what should be returned here?
}
++i;
}

for (i = 0; string[i] >= '0' && string[i] <= '9'; ++i)
{
intValue = string[i] - '0';
result = result * 10 + intValue;
}

return result;
}

最佳答案

// what should be returned here?

可以在此处返回任何看起来不像有效结果的内容。通常解决这个问题的方法是将结果移动到一个输出参数。从而释放指示操作成功的状态的返回值。例如:

#include <stdbool.h>

bool strToInt(const char string[], int* outInt) {

// check whether string passed is a valid literal
while (string[i] != '\0')
{
if (string[i] < '0' || string[i] > '9')
{
printf("ValueError: Invalid literal\n");
return false;
}
}

int result = 0;
for (int i = 0; string[i] >= '0' && string[i] <= '9'; ++i)
{
intValue = string[i] - '0';
result = result * 10 + intValue;
}

if (outInt) // Or you may move the check earlier and return false too
*outInt = result;

return true;
}

当然,您可以返回任何类型而不仅仅是 bool 值。许多软件系统返回几个整数值之一,这些整数值可能指示操作可能失败的几种方式中的任何一种。因此,错误处理可以更加准确和复杂。

关于c - 故意返回无效值或类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47855641/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com