我正在尝试建立自己的小型库来处理超过int或double限制的大数字计算。我知道有一些有用的库用于此目的,但我只是尝试自己做。
下面的代码,我找不到错误,也没有编译器(minGW的gcc)。它根本不运行。我多次重读代码,但仍然无法理解为什么我的电脑拒绝运行它。顺便说一下,我正在使用Windows 7。任何帮助或建议都将不胜感激。
(该代码用于打印11111 ............ 111111111.11111)
#include <stdio.h>
#include <stdlib.h>
#define PLUS 10
#define MINUS 11
void myprint(char f[]);
int getlen(char f[]);
void daeip(char f[], char g[]);
/*
(len: the length of the array f[])
f[len - 3]: start of the number; the number part is from f[f[len - 3]] to f[0]
f[len - 2]: number of decimals
f[len - 1]: plus or minus
*/
int main(){
char f[100], g[100];
int i;
for(i=0;i<50;i++){
f[i] = '1';
}
f[100 - 3] = 49;
f[100 - 2] = 5;
f[100 - 1] = MINUS;
daeip(f, g);
myprint(g);
return 0;
}
void myprint(char f[]){
int i;
int len = getlen(f);
if(f[len - 1] == MINUS){
printf("-");
}
for(i = f[len - 3]; i >= 0; i--){
printf("%s", f[i]);
if(i == f[len - 2]) printf(".");
}
}
int getlen(char f[]){
int len = sizeof(f)/sizeof(f[0]);
return len;
}
void daeip(char f[], char g[]){
int flen = getlen(f);
int glen = getlen(g);
int i;
for(i=0; i <= f[flen - 3]; i++){
g[i] = f[i];
}
g[glen - 3] = f[flen - 3];
g[glen - 2] = f[flen - 2];
g[glen - 1] = f[flen - 1];
}
答案 0 :(得分:1)
您在printf语句中使用%s,它期望指向字符串(char数组)的指针作为参数。 你应该使用%c。期望将char作为参数。换句话说,改变:
printf("%s", f[i]);
至printf("%c", f[i]);
详细说明:
char[] test = "This is a test";
char firstCharacter = test[0];// 'T'
// The following will print out: This is a test
printf("%s", test);
// The following will be unpredictable, and may cause a runtime error. (even though it compiles)
printf("%s", firstCharacter);
// The following will print out 'T'
printf("%c", firstCharacter);
我还建议您创建一个结构或类,以便将长度,小数位和符号与实际数字分开。