【问题标题】:Reading numbers and characters from a file从文件中读取数字和字符
【发布时间】: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;

标签: c file


【解决方案1】:

对于您的文件类型有:

while((ch=fgetc(input)) != '0' )
  {
  /* your main processing */
  if (ch == '\n')
    {
    /* deal with end of expression */
    }

  }

拥有多个 while 块和 fgetc(input); 让每个人都感到困惑。

【讨论】:

  • 我正在尝试这样做,但是 ch=fgetc(input) 一次获取整个表达式,而不是一次获取一个字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 2013-03-01
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多