【发布时间】:2016-03-25 01:02:50
【问题描述】:
我在文件中遇到了一些问题。
我正在尝试从文件中读取数字和特殊字符。我得到一个包含数字和操作数的文件。该文件是从命令行读入的。
示例文件:
1 4 + 5*
2 - 4 + 8
7 -2 +1 +3
0
所以文件以 0 结束,每一行都是一个表达式。我的代码试图做的是一次读取一个表达式
1 4 + 5 *
使用它,然后继续下一个表达式(直到文件读取为 0)。它还需要包含特殊字符(+、*、-、等)
到目前为止,这是我的代码。我不知道每个表达式的长度(可能会有所不同),所以我只是将其静态声明为 50 的长度。
int main(int argc, char* argv[]){
FILE* input;
char expression[50];
int i;
char ch;
input = fopen(argv[1], "r");
if(input == NULL){
printf("File does not exist! Exiting program!");
return 0;
}
do{
ch= fgetc(input);
if(ch == 0)
break;
while((ch != '\n')){
//printf("test2\n");
expression[i] = ch;
i++;
ch = fgetc(input);
}
//plan to do something with each expression here
} while(ch != EOF);
for(i=0; i < (strlen(expression)); i++)
printf("%c ", expression[i]);
return 0;
}
我在这里要做的只是检查它是否会读入表达式并正确打印出来。当我尝试运行它时,我得到一个段错误,我放入 test2 语句进行测试并将它打印出来(无限循环),直到它出现段错误。
任何帮助将不胜感激。
【问题讨论】:
-
您的内部
while循环一直运行到段错误,因为您从未更新ch。您忘记将其设置为fgetc的输出。另外,你还应该检查fgetc是否返回0。 -
1)
char expression[50];(null-terminate) -->char expression[50] = {0};2)char ch;(EOF) -->int ch;3)if(ch == 0)--> @987654333 @ (?) 4)i++; fgetc(input);-->i++; ch = fgetc(input); -
我将更新添加到 ch 并且它仍然处于无限循环中
-
更改:
if(ch == 0)到if(ch == '0') -
次要:
char ch;应该是int ch;