将scanf输入分割为数组直到EOF

时间:2014-12-04 02:05:10

标签: c arrays scanf eof

想要使用scanf阅读,但如果我遇到',''\ 0'(换行符)或EOF

我想停止阅读

我不确定如何停止实现这一点。

我正在使用

 char * aBuff;
 char * bBuff;
 char * cBuff;

 //read in the first three lines and put them into char arrays
 //while (scan() != (',' || '\0' || EOF))  //was trying to put it into a while loop, wasn't sure
 scanf("%s", aBuff);
 scanf("%s", bBuff);
 scanf(%s, cBUff);

我打算接受输入并将它们放入单独的数组中。基本上将输入直到a或新行并将该数据放入数组并继续此过程直到文件结束。

2 个答案:

答案 0 :(得分:2)

在遇到scanf()',''\0'之前,

EOF不是一种实用的方法。使用fgetc()

最大的问题是以'\0'的格式指定scanf()。示例:格式为"%[^,\0]"时,scanf()仅在嵌入式"%[^,"停止时显示'\0'。所以使用无效的格式说明符 - >未定义的行为。

size_t ReadX(char *dest, size_t size) {
  size_t len = 0;
  if (size) {
    while (--size > 0) {
      int ch = fgetc(stdin);
      if (ch == 0 || ch == ',' || ch == EOF) break;  // maybe add \n too.
      *dest[len++] = ch;
    }
    *dest[len] = '\0';
  }
  return len;  // or maybe return the stopping ch
}

如果代码使用了笨重的话,可以使用

scanf()

scanf("%[\1\2\3...all_char_codes_min_char_to_max_char_except_,_and\0]%*c", &s);

答案 1 :(得分:1)

您可以尝试使用scansets

scanf()应该在EOF上停止,但你可能想做这样的事情:

scanf("%[^,\0]", &s);