【发布时间】:2020-05-14 05:33:48
【问题描述】:
我试图找出我的代码有什么问题,因为它总是只跳到printf("not an octal number part"); 并且只输出虽然前面有许多其他计算,但我正在尝试调试它但不能似乎找到了错误。这是下面问题的夏天,我们还不允许使用指针。
一个 C 程序,以一行字符的形式输入一个八进制数并将输入的字符存储在一个数组中。将八进制数转换为十进制整数,并使用 printf 在标准输出上显示十进制整数。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
int main() {
char my_strg[MAX_SIZE];
int c;
int res = 0;
int i = 0;
while ( (c = getchar()) != '\n') {
my_strg[i] = c;
i++;
}
int k = 0;
for(k = strlen(my_strg)-1; k >= 0; k--) {
if((my_strg[k] >= '0') && (my_strg[k] <= '7')) {
res += (pow(8, k) * (my_strg[k]-'0'));
} else if(my_strg[k] == '-') {
res *= -1;
} else {
printf("not an octal number");
break;
}
k++;
}
printf("%d\n", res);
}
【问题讨论】:
-
确保以空值终止
my_strg(在最后一个字符后添加\0)。 -
不要
pow为整数!! -
你熟悉
strtol系列函数吗? -
while (i < MAX_SIZE - 1 && (c = getchar()) != '\n' && c != EOF) -
从不为此目的使用
pow。 从不。改为使用重复的乘法或位移。
标签: c arrays loops stdout stdin