C 从文件中读取数字和字符
我在文件中遇到了一些问题 我正在尝试从文件中读取数字和特殊字符。我得到了一个包含数字和操作数的文件。文件是从命令行读入的 示例文件:C 从文件中读取数字和字符,c,file,C,File,我在文件中遇到了一些问题 我正在尝试从文件中读取数字和特殊字符。我得到了一个包含数字和操作数的文件。文件是从命令行读入的 示例文件: 1 4 + 5* 2 - 4 + 8 7 -2 +1 +3 0 因此,文件以0结尾,每一新行都是一个表达式。我的代码试图做的是一次读取一个表达式 1 4 + 5 * 使用它,然后转到下一个表达式(直到文件读取0)。它还需要包含特殊字符(+、*、-、等) 这是到目前为止我的代码。我不知道每个表达式的长度(它可以变化),所以我只是静态地声明它的长度为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;
}
intmain(intargc,char*argv[]){
文件*输入;
字符表达式[50];
int i;
char ch;
输入=fopen(argv[1],“r”);
如果(输入==NULL){
printf(“文件不存在!正在退出程序!”);
返回0;
}
做{
ch=fgetc(输入);
如果(ch==0)
打破
而((ch!='\n')){
//printf(“test2\n”);
表达式[i]=ch;
i++;
ch=fgetc(输入);
}
//计划对这里的每个表达式做些什么
}while(ch!=EOF);
对于(i=0;i<(strlen(表达式));i++)
printf(“%c”,表达式[i]);
返回0;
}
我在这里要做的只是检查它是否能读入表达式并正确打印出来。当我试着运行它时,我得到一个segfault,我把test2语句放入测试中,它打印出来(无限循环),直到它出现segfault
任何帮助都将不胜感激 对于您的文件类型,有:
while((ch=fgetc(input)) != '0' )
{
/* your main processing */
if (ch == '\n')
{
/* deal with end of expression */
}
}
具有多个而块和fgetc(输入)让每个人都感到困惑。您的内部
while
循环一直运行到SEGFULT,因为您从未更新ch
。您忘记将其设置为fgetc
的输出。此外,还应检查fgetc
是否返回0.1)char表达式[50]
(对于空终止)-->char表达式[50]={0}代码>2)charch代码>(用于EOF)-->intch代码>3)if(ch==0)
-->if(ch==0')
(?)4)i++;fgetc(输入)代码>-->i++;ch=fgetc(输入)
I将更新添加到ch,它仍然处于无限循环更改中:if(ch==0)
toif(ch==0')
Minor:char-ch代码>应为int ch代码>我正试图这样做,但是ch=fgetc(input)一次获取整个表达式,而不是一次获取一个字符。