我制作了一个简单的字典代码,并浏览了一个小时,然后我找到了一个文件I / O代码。但我的编译器(我使用Microsoft Visual C ++)说我的代码(不幸的是,代码的核心部分)是错误的。但我无法得到它。究竟是什么错,为什么???
/*
DosDic ver 1.0.0 2015-07-03
*/
#include<stdio.h>
#include<string.h>
char key = 0;
FILE *fp; //set a file pointer var
fp = fopen("dicdata.dat","r"); //open a file
int b = 0;
int trial = 0;
char result[];
char searchfor[] = fp; //save a whole list of dictionary in a var
int i;
char sb[]; //var for search in a list
int getsearchtrial(char sb[]){
for(i=0;i=strlen(sb);i++){ //how much I tried to reach to the word
switch((int)searchfor[b]-(int)sb[i]){ //are two alphabets same?
case 0 :
default : i=0;
}
b++; //keep finding in a list
trial++; //try again
}
return trial;
}
int adress;
int mainpage(){
printf("Type what you want to search : ");
scanf("%c",sb[ ]);
getsearchtrial(sb[ ]) - strlen(sb[ ]) = adress; //where the word is located in the list
for(i = adress;i = adress + 30; i++){ //print
printf("%c",searchfor[i]);
}
printf("Thank you for using DosDic ver.1.0!"); //thank you!
}
void main(){ //call all those functions
mainpage();
fclose(fp); //close list
}
//and whats wrong with this? i cant even get it, but it's not working
答案 0 :(得分:3)
多个问题。
首先,您无法将fopen
的结果分配给函数体外的fp
;您必须将fp = fopen("dicdata.dat", "r");
移到您的某个函数(getsearchtrial
中)的正文中。
其次,您不是通过简单地将文件指针指向对象来读取文件;您必须使用fscanf
或fread
或fgets
等库函数。假设您的文件包含长度为80的单个字符串,则需要编写类似
char searchfor[81] = {0}; // make sure string is initially empty,
// extra space for string terminator
if ( !fgets( searchfor, sizeof searchfor, fp) )
{
// error reading from file
}
当然,这取决于输入文件的结构。如果它包含字符串列表,那么您将需要使用多维数组(或其他一些结构)。
第三,声明数组时,必须先指定其大小才能使用它。 result
和searchfor
是不完整的数组定义。
最后,这一行
getsearchtrial(sb[ ]) - strlen(sb[ ]) = adress;
需要逆转;分配的目标必须位于赋值运算符的左侧。
您需要退后一步,学习如何从头开始编写C代码。
答案 1 :(得分:2)
有太多错误,我甚至不打算在这里逐条列出 - 大多数错误似乎源于你对C中数组的理解不足。
最值得注意的是......
FILE *
分配给char
数组(并期望体面
结果)。fp = fopen
之类的声明
像你这样的全球范围。尝试this tutorial,你可以解决95%的问题,然后再去那里。