C:没有错误,编译成功,但没有运行

时间:2014-07-06 18:39:04

标签: c

我正在尝试建立自己的小型库来处理超过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];
}

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);

我还建议您创建一个结构或类,以便将长度,小数位和符号与实际数字分开。