我的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。
答案 0 :(得分:1)
只需更改
char proba[26][26];
到
int proba[26][26];
您已在%d
格式说明符中使用printf()
,稍后会转换为float
。