Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从文件中读取数字和字符_C_File - Fatal编程技术网

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)-->
intch3)
if(ch==0)
-->
if(ch==0')
(?)4)
i++;fgetc(输入)-->
i++;ch=fgetc(输入)
I将更新添加到ch,它仍然处于无限循环更改中:
if(ch==0)
to
if(ch==0')
Minor:
char-ch应为
int ch我正试图这样做,但是ch=fgetc(input)一次获取整个表达式,而不是一次获取一个字符。