使用c

时间:2015-11-26 13:34:28

标签: c arrays string file

我现在要做的是有一个输入文本文件,将其内容加载到二维数组中,对其执行某些操作然后将其放入另一个文件中。对我来说,基本问题是保留原始文件的结构。这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main(void)
 {
  FILE *ifp, *ofp;
  char buffer[100];
  int i, c;

  ifp=fopen("test.in", "r");
  ofp=fopen("test.out", "w");

  while (!feof(ifp)){
  if(fscanf(ifp, "%s", buffer) != 1)
   break;
  fprintf(ofp, "%s", buffer); 
}  
return 0;
}

我的意见:

aaa bb bbb
bbbbb bbbb aa

并输出:

aaabbbbbbbbbbbbbbaa

我为EOL或EOF识别尝试的所有内容都会导致无限循环。使用“%c”而不是“%s”执行任何操作会导致输出更差。提前致谢。 编辑:我知道我可以将输出变为带有空格的单词,或者将每个单词放在一个新行中,但我不知道如何从这里获得最终结果。

2 个答案:

答案 0 :(得分:0)

使用"%c"

#include <stdio.h>

int main(void)
{
  FILE *ifp, *ofp;
  char buffer;

  ifp=fopen("test.in", "r");
  if(ifp==NULL)return 1;
  ofp=fopen("test.out", "w");
  if(ofp==NULL){
    fclose(ifp);
    return 1;
  }

  for(;;){
    if(fscanf(ifp, "%c", &buffer) != 1)
      break;
    fprintf(ofp, "%c", buffer); 
  }
  fclose(ifp);
  fclose(ofp);
  return 0;
}

getc()

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  FILE *ifp, *ofp;
  int buffer;

  ifp=fopen("test.in", "r");
  if(ifp==NULL)return 1;
  ofp=fopen("test.out", "w");
  if(ofp==NULL){
    fclose(ifp);
    return 1;
  }

  for(;;){
    if((buffer = getc(ifp)) != EOF)
      break;
    putc(buffer, ofp); 
  }
  fclose(ifp);
  fclose(ofp);
  return 0;
}

你不会需要feof()因为用于阅读的函数会检测到EOF。

另外,不要忘记检查文件是否成功打开并关闭打开的文件。

答案 1 :(得分:0)

使用 getline 功能代替 fscanf 。因为 fscanf 无法读取包含空格字符的完整字符串

change: function () {
    $('#setpolicyform').bootstrapValidator('revalidateField', 'policyta');
}

查看 getline 的完整详情: http://man7.org/linux/man-pages/man3/getline.3.html