簡體   English   中英

用C輸入各種格式

[英]Input of varying format in 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;
      }
   }
}

我的個人變體:

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 (注意添加的空格字符)來做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM