【发布时间】:2014-01-11 22:22:19
【问题描述】:
请帮助我。 我不知道为什么这个程序不起作用。 抱歉,我需要发布整个代码,以便清楚地理解。
我尝试将 str 放入 txt 文件,然后再次读取它,这是同样的问题。 另外,我尝试用其他一些指针更改指针,然后对它们进行比较,以及 samo 问题。
程序的参数是:
1) txt 文件 - 类似这样的东西 - xyxxyyyxyxxyxyyxyxyxyyyyxxxx...
2) 数字 - 示例 - 2 - 表示我需要成对组合符号
输出应该是 x 和 y 的任意组合的概率(xx,yy,xy,yx - 2 组)。 示例:
p(xx)=0.4
p(yy)=0.1
p(yx)=0.5
p(xy)=0
但是! 这总是正确的:
if (str==lista[i])
为什么? 我为此苦苦挣扎了好几个小时。 :(
我尝试了其他人的建议:
看看这个:
http://i.imgur.com/SL1L8hc.jpg 和
http://i.imgur.com/QwZGdgM.jpg
最奇怪的一个:
http://i.imgur.com/BIeLXOu.gif
完整代码:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
typedef char * string;
int main(int argc, char *argv[]){
if (argc<3) {
return -1;
}
FILE *ul;
int mode,i,dane,j,razl;
char *str;
int brojac=0;
string lista[1000];
int pomlis[1000];
ul=fopen(argv[1],"r");
fseek(ul,0,SEEK_SET);
if (!ul){
return 1;
}
for (i=0;i<1000;i++){
lista[i]="nist";
pomlis[i]=0;
}
mode=atoi(argv[2]);
str=(char*)malloc(mode+1);
brojac=0;
razl=0;
while (fgets(str,sizeof(char)*mode+1,ul)!=NULL){
dane=0;
// printf("%s ",str); //da bi printao u konzolu
brojac++;
for (i=0;i<=razl;i++){
if (str==lista[i]){
pomlis[i]++;
dane=1;
}
}
if (dane==0){
if (lista[i]=="nist") i--;
lista[i+1]=str;
pomlis[i+1]=1;
razl++;
}
}
for (i=1;i<=razl;i++){
printf("p(%s)=%f\n",lista[i],pomlis[i]/((double)brojac));
}
fclose(ul);
return 0;
}
我尝试了 cmets 中的所有建议,但没有任何效果。有谁知道答案吗?
【问题讨论】:
-
如果你想比较字符串本身的相等性,你需要 strcmp
-
已编辑。你知道if有什么问题吗?看看我添加的图片。
-
if 没有问题。您的调试是问题所在。