用C输入各种格式

时间:2018-12-02 08:07:01

标签: c

我当前正在尝试找出如何处理以下格式的输入:[int_1,...,int_N],其中N是间隔<1,MAX_N>中的任何数字(例如#define MAX_N 1000)。我现在拥有的是fgets并将其作为字符串获取,然后我使用一些循环和sscanf将其保存到int数组中。

我的解决方案是IMO,不是最优雅,功能最全的,但这是因为我实现了它。所以我想问的是你们将如何解决这个问题,因为我已经没有足够的想法了。

编辑:添加字符串代码-> int数组

int digit_arr[MAX_N];
char input[MAX_N];

//MAX_N is a constant set at 1000
//Brackets and spaces have been removed at this point

for (i = 0; i < strlen(input); i++) {
  if(sscanf(&input[i+index_count],"%d,", &digit_arr[i]) == 1){
    while (current_char != ',') {
      current_char = input[i+index_count+j];
      index_count++;
      j++;
      if ((index_count+j+i) == strlen(input)-1){
        break;
      }
   }
}

1 个答案:

答案 0 :(得分:0)

我的个人变量:

char const* data = input; // if input is NOT a pointer or you yet need it unchanged
for(;;)
{
    int offset = 0;
    if(sscanf(data, "%d,%n", digit_arr + i, &offset) == 1)
    {
        ++i;
        if(offset != 0)
        {
            data += offset;
            continue;
        }
    }
    break;
}

如果文本中的所有字符都被占用,您可能最终会退缩:

if(*data)
{
    // not all characters consumed, input most likely invalid
}
else
{
    // we reached terminating null character -> fine
}

请注意,我的代码本身并不覆盖尾随空格,您可以通过将格式字符串更改为"%d, %n(注意添加的空格字符)来实现。