C 将文件中的字符数组读入二维数组
当我试图从一个包含10个方程的文件中将方程(如3+5/6)读入一个二维数组时,在以下方法中遇到了问题C 将文件中的字符数组读入二维数组,c,fopen,C,Fopen,当我试图从一个包含10个方程的文件中将方程(如3+5/6)读入一个二维数组时,在以下方法中遇到了问题 int count=1; void read(){ int i; int j; FILE *file = fopen("C:\\Users\\Sara\\Desktop\\Project2\\input", "r"); if(file == NULL){ printf("Unable to open file"); }else{ while(!feof(fi
int count=1;
void read(){
int i;
int j;
FILE *file = fopen("C:\\Users\\Sara\\Desktop\\Project2\\input", "r");
if(file == NULL){
printf("Unable to open file");
}else{
while(!feof(file)){
for (i=0; i <=20; i++){
for (j=0;j<=100;j++){
if (fscanf(file,"%c", &array[i][j]) < 1) break;
printf("Equation %d : %s \n", count, array[i]);
count++;
}
}
}
}
fclose(file);
}
int count=1;
无效读取(){
int i;
int j;
FILE*FILE=fopen(“C:\\Users\\Sara\\Desktop\\Project2\\input”,“r”);
if(file==NULL){
printf(“无法打开文件”);
}否则{
而(!feof(文件)){
对于(i=0;i,您的代码存在一些问题:
- 您没有说明数组是如何定义的,但我假设它是
array[20][100]
。有效输入分别为0到19和0到100,上限在C中是独占的。您的循环看起来像(I=0;您能描述一下您的问题吗?您似乎读取了数组[0]中的所有行),因为您只在文件的末尾出现“代码>中断<代码>。您还应该检查新的行字符<代码> \n′/COD>。并且考虑使用<代码> GETC而不是<代码> FSCANF读取字符。或者,请考虑使用<代码> FGES。@ MoeMm,我怎样才能使每个方程存储在不同的索引中?我应该检查新行字符吗?如果我想在另一个函数中使用方程呢?就像在你的代码中一样,array
是一个全局变量,你可以从同一个文件的其他地方访问。我试图创建一个函数来检查方程,检查它们是否有效,但除了第一个方程之外,它不需要void checkErrors(char array[20][100]){int l;int m;for(l=0;l请在这里寻求帮助之前了解有关字符串的更多信息。同样,有很多地方是错误的。(1)不要在固定边界上循环。l
应运行到count
(或read
的返回值);在遇到terinating null后,m
上的循环应该停止。之后的所有chacatres都可能包含garabge,并且可能包含一个美元符号。(2)字符串的%s
格式需要一个C字符串,即char*
作为参数。您传递数组,即char[20][100]
或字符(*)[100]
;请传递数组[l]
(3)不要打印整个字符串(重复)在内部循环中。我不知道你到底想做什么,但一次处理一个方程式可能更容易:阅读一个方程式,检查它,评估它。阅读下一个方程式,等等。这样你就可以处理一维汽车阵列,这可能会更清楚。
int read(const char *fn)
{
int i, j;
FILE *file = fopen(fn, "r");
if (file == NULL) {
fprintf(stderr, "Unable to open file %s.\n", fn);
return -1;
}
i = 0;
j = 0;
while (i < 20) {
int c = getc(file);
if (c == EOF) {
/* End of file: stop reading */
array[i][j] = '\0';
break;
}
if (c == '\n') {
/* New line: Begin new line and reset column counter */
array[i][j] = '\0';
j = 0;
i++;
} else {
if (j < 100 - 1) array[i][j++] = c;
}
}
fclose(file);
return i;
}