【发布时间】:2023-03-18 12:35:01
【问题描述】:
主要
[警告] 从不兼容的指针类型传递“calculatetextstatistics”的参数 1
[注意] 预期为 'int *' 但参数类型为 'int **'
在计算文本统计中
[警告] 传递 'countwords' 的参数 2 使指针从整数而不进行强制转换 [注意] 期望 'int *' 但参数是 'int' 类型
如何将我计算的单词数(n)从 countwords 传递给其他函数而不发出任何警告?
程序按原样运行(更新:但是当我将其粘贴到主(非项目)错误弹出窗口时)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getchoice(void);
void inserttextfromfile();
void printtextdata(FILE *);
void countwords(FILE *,int *);
void calculatetextstatistics(int *);
void countchars(FILE *);
void countcharsbutspaces(FILE *);
void countuniquewords(FILE *,int* );
void createhistogram(FILE *,int* );
int cntocc(int [],int [],int,int);
int main(){
int a,g;
int *n=&g;
while((a=getchoice())){
switch (a){
case 1:
break;
case 2: ;
break;
case 3: ;
break;
case 4: ;
break;
case 5:calculatetextstatistics(&n) ;
break;
case 6: ;
break;
default: break;
}
}
return 0;
}
int getchoice(){
int a;
scanf("%d",&a);
return a;
}
void calculatetextstatistics(int *n){
FILE *p;
p=fopen("mytext.txt","rt");
countwords(p,*n);
p=fopen("mytext.txt","rt");
countchars(p);
p=fopen("mytext.txt","rt");
countcharsbutspaces(p);
p=fopen("mytext.txt","rt");
countuniquewords(p,*n);
p=fopen("mytext.txt","rt");
createhistogram(p,*n);
}
void countwords(FILE *p,int *n){
int countw=0;
char wordholder[10]=" ";
char wordlist[60][10];
for (;(fscanf(p,"%s",wordholder))!= EOF;countw++);
printf("%d\n",countw);
fclose(p);
*n=countw;
return;
}
完整代码(经过一些更正)
注意我在某些 FOR 循环 *n 中的第一个和最后两个函数(如果这就是问题...)。
在我的项目中,参数状态如上,会弹出警告和注释,但没有错误,并且程序会执行应该执行的操作。但是,如果我将代码复制并粘贴到新的 main 上,它会显示错误(不运行),下面的代码是 main 中的更正代码,它也不起作用(运行但没有做它应该做的事情,意思是它不计算文件中正确的单词数,其他所有内容都是错误的。)真正的问题是程序如何在项目上运行,但是当我将它粘贴到 main 上时它不会
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getchoice(void);
void inserttextfromfile();
void printtextdata(FILE *);
void countwords(FILE *,int *);
void calculatetextstatistics(int *);
void countchars(FILE *);
void countcharsbutspaces(FILE *);
void countuniquewords(FILE *,int* );
void createhistogram(FILE *,int* );
int cntocc(int [],int [],int,int);
int main(){
int a,g;
int *n=&g;
while((a=getchoice())){
switch (a){
case 1:
break;
case 2: ;
break;
case 3: ;
break;
case 4: ;
break;
case 5:calculatetextstatistics(n) ;
break;
case 6: ;
break;
default: break;
}
}
return 0;
}
int getchoice(){
int a;
scanf("%d",&a);
return a;
}
//void inserttextfromfile(){
// FILE *p;
// p=fopen("mytext.txt","rt");
// printtextdata(p);
// fclose(p);
// return;
//}
//void printtextdata(FILE *p){
// int g;
// char space[10]=" ";
// for (;(g=fscanf(p,"%s",space))!= EOF;printf("%s\n",space));
// return;
//}
void calculatetextstatistics(int *n){
FILE *p;
p=fopen("mytext.txt","rt");
countwords(p,n);
p=fopen("mytext.txt","rt");
countchars(p);
p=fopen("mytext.txt","rt");
countcharsbutspaces(p);
p=fopen("mytext.txt","rt");
countuniquewords(p,n);
p=fopen("mytext.txt","rt");
createhistogram(p,n);
}
void countwords(FILE *p,int *n){
int countw=0;
char wordholder[10]=" ";
char wordlist[60][10];
for (;(fscanf(p,"%s",wordholder))!= EOF;countw++);
printf("%d\n",countw);
fclose(p);
*n=countw;
return;
}
【问题讨论】:
-
n已经是一个指针,您不应该使用 addresof (&) 运算符将其传递给您的函数。
标签: c