C文件输入&输出
问题描述:
我做了一个简单的字典代码,冲浪了一个小时,并且我找到了一个文件I/O代码。但我的编译器(我使用Microsoft Visual C++)说我的代码(不幸的是,代码的核心部分)是错误的。但我无法得到它。什么是错误的,为什么?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
答
有这么多错,我也不打算在这里itemise这一切 - 大部分似乎从你缺乏阵列的理解C.干
最值得注意的是...
- 您不能声明数组,也不能初始化它或指定大小。
- 您不能将
FILE *
分配给char
数组(并且期望得到不错的 结果)。 - 您不能像您一样在 全球范围内执行像
fp = fopen
这样的陈述。
尝试this tutorial并且您可以修复95%的问题,然后从那里开始。
答
多个问题。
首先,您不能将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代码。
它有什么问题?你的编译器告诉你什么?什么是确切的错误/警告? – user463035818
我们需要编译器错误/警告和/或预期的和实际的输出来帮助你 – LBes