如何用C语言编写一个函数,当用户输入的除数不为0并且不是未知字符(如空格或特殊字符)时,才能正确计算并输出商?如果输入的被除数为0或包含无效字符,应返回'error'提示。
时间: 2024-12-21 08:22:21 浏览: 10
在C语言中,你可以使用`fgets()`函数读取用户的输入,并通过`isspace()`和`isalnum()`函数检查字符是否有效。下面是一个简单的函数示例,它会接受用户输入的被除数和除数,然后处理上述条件:
```c
#include <stdio.h>
#include <ctype.h>
// 函数声明
char* calculate_quotient(char *numerator, char *denominator);
int main() {
char numerator[50], denominator[50];
printf("请输入被除数(不包括除号): ");
fgets(numerator, sizeof(numerator), stdin);
numerator[strlen(numerator) - 1] = '\0'; // 移除末尾的换行符
printf("请输入除数(不包括分号): ");
fgets(denominator, sizeof(denominator), stdin);
denominator[strlen(denominator) - 1] = '\0'; // 移除末尾的换行符
// 检查输入的有效性
if (denominator[0] == '0' || (denominator[1] != '\0' && !isdigit(denominator[1]))) {
return puts("error: 除数不能为0或包含无效字符");
}
char* result = calculate_quotient(numerator, denominator);
if (result == NULL) {
printf("error: 输入无效\n");
} else {
printf("商是: %s\n", result);
free(result); // 记得释放内存
}
return 0;
}
// 计算商的函数
char* calculate_quotient(char *numerator, char *denominator) {
if (strcmp(denominator, "0") == 0) {
return "error: 除数不能为0";
}
int num_len = strlen(numerator), den_len = strlen(denominator);
int num = 0, den = 0;
for (int i = 0; i < num_len; ++i) {
if (!isdigit(numerator[i])) {
return "error: 被除数包含无效字符";
}
num = num * 10 + (nominator[i] - '0');
}
for (int i = 0; i < den_len; ++i) {
if (!isdigit(denominator[i])) {
return "error: 除数包含无效字符";
}
den = den * 10 + (denominator[i] - '0');
}
// 商的字符串表示
char* quotient = malloc((num / den) * sizeof(char) + 2); // 留两个空位给前导零和终止符
sprintf(quotient, "%d", num / den);
return quotient;
}
```
阅读全文