C输出变量位置(指针)而不是实际值。
C输出变量位置(指针)而不是实际值。
我正在进行一个班级项目,我想多做一点,对我的数据进行验证。问题似乎发生在num1 = num1Input
(以及num2 = num2Input
)的地方,它获取的是位置(我猜是这样),而不是实际的输入值。
#include#include #include #include #include int main(void) { //变量 char num1input[10]; char num2input[10]; int length, i; int num1 = 0; int num2 = 0; int countErrors1 = 0; int countErrors2 = 0; bool correct1 = false; bool correct2 = false; //--变量声明结束--// do { printf("请输入一个数字:"); scanf("%s", num1input); length = strlen(num1input); for (i = 0; i < length; i++) { if (!isdigit(num1input[i])) { countErrors1++; } } if (countErrors1 > 0) { printf("输入不是一个数字\n"); } else { correct1 = true; } } while (correct1 == false); num1 = atoi(num1input); do { printf("请输入第二个数字:"); scanf("%s", num2input); length = strlen(num2input); for (i = 0; i < length; i++) { if (!isdigit(num2input[i])) { countErrors2++; } } if (countErrors2 > 0) { printf("输入不是一个数字\n"); } else { correct2 = true; } } while (correct2 == false); num2 = atoi(num2input); printf("%d %d \n", num1, num2); int addition = num1 + num2; int substraction = num1 - num2; int multiplication = num1 * num2; float division = (float)num1 / num2; printf("加法:%d 减法:%d 乘法:%d 除法:%.1e", addition, substraction, multiplication, division); getch(); }
问题的原因是在将字符串转换为数字时,使用了不正确的类型转换。通过使用atoi
函数进行转换,可以解决这个问题。然而,atoi
函数忽略了解析错误。为了确保检测到溢出,可以使用strtol
函数。另外,如果想要识别十六进制语法,可以使用strtol
函数。另外,还需要注意的是,当char
为有符号类型并且num1input[i]
具有负值时,isdigit(num1input[i])
可能不正确。在进行浮点数除法时,需要注意使用float division = (float)num1 / num2;
来计算浮点数除法。另外,建议使用double
而不是float
来获得更好的精度。最后,给出了一个修正和简化的版本的代码示例。
代码示例中给出的解决方法是使用strtol
函数来将字符串转换为数字,并进行溢出检测。具体的解决方法如下:
1. 引入头文件:#include <stdlib.h>
2. 定义变量:char *endp;
3. 使用strtol
函数将字符串转换为long
类型的数字:long lval = strtol(num1input, &endp, 10);
4. 检查是否发生了解析错误:if (endp == num1input || errno != 0 || lval < INT_MIN || lval > INT_MAX)
5. 如果发生了解析错误,可以打印错误信息或者进行其他处理。
6. 将lval
转换为int
类型的数字:num1 = lval;
同样的方法也适用于num2input
。
最后,给出了一个修正和简化的版本的代码示例,包括了上述的解决方法。