2D数组+ = 1给出了负数

时间:2015-04-05 16:16:36

标签: c arrays scanf argv memset

我的C程序有问题;我不知道为什么我的2D数组给了我负数。

memset数组:

memset(array , 0 , sizeof(array[0][0]) * 26 * 26);

我只是阅读一个文件,当我在' a'之间有2个字符时和' z'我做的很简单:

array[c - 'a'][d - 'a'] += 1;

char c , d;

但是当我做的时候

printf("le : %d\n" , array['l' - 'a']['e' - 'a']);

我明白了:

le : -34

但这根本不可能。

以下是完整的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc , char * argv[])
{
    char proba[26][26];
    memset(proba , 0 , sizeof(proba[0][0]) * 26 * 26);
    FILE * fic;
    char c , d;
    fic = fopen(argv[2] , "r");
    if(fscanf(fic , "%c" , &c) != 1) return 2;
    while(!feof(fic))
    {
        if(fscanf(fic , "%c" , &d) == 1)
        {
            if(c >= 'a' && c <= 'z' && d >= 'a' && d <= 'z')
            {
                printf("%c%c %d - " , c , d , proba[c - 'a'][d - 'a']);
                proba[c - 'a'][d - 'a'] += 1;
            }
        }
        c = d;
    }
    fclose(fic);
    printf("\nProbability of %c%c is %f\n" , argv[1][0] , argv[1][1] , (float)proba[argv[1][0] - 'a'][argv[1][1] - 'a'] / (26 * 26));
}

// use ./main le file.txt

EDIT:已解决 - 一个noob错误,使用2D数组char来保存整数...

再次使用StackOverflow。

1 个答案:

答案 0 :(得分:1)

只需更改

char proba[26][26];

int proba[26][26];

您已在%d格式说明符中使用printf(),稍后会转换为float