簡體   English   中英

sscanf是否有通用格式說明符?

[英]Is there a general format specifier for `sscanf`?

我正在使用C(++)程序,該程序需要從文件中讀取值。 這些值可以是整數(有符號或無符號)或浮點數。 目前,該文件僅包含十進制數字(整數),因為sscanf()格式說明符%d似乎已足夠。

但是,將來文件可能包含各種數字,例如正數或負數(整數或浮點數),在后一種情況下,精度是未知的,並且不存在前導或尾隨零,如以下示例所示:

1
+2
-34
12.5
-13.5
+00014.31000000

是否有一種格式說明符可以涵蓋所有這些情況,還是我在做夢?

謝謝

我認為不存在這樣的魔術說明符,因為傳遞給sscanf()的參數類型是固定的。

不管可能的精度損失如何,整數都可以看作是浮點數(反之亦然)。 因此,如果您不在乎輸入是整數還是浮點數,只需使用fgets(input, BUFFER_SIZE, stdin); 其次是scanf(input, "%lf", &dblVal);

但是,如果您真的很在意,下面是一個如何處理它們的示例:

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

#define BUFFER_SIZE 80

int main(void)
{
    char *input = malloc(BUFFER_SIZE);
    char *endptr;
    fgets(input, BUFFER_SIZE, stdin);
    input[strcspn(input, "\n")] = '\0';

    long intVal = strtol(input, &endptr, 10);
    if(!*endptr)
    {
        // input is an integer
        printf("%ld", intVal);
    }
    else
    {
        // input is an floating point number
        double dblVal;
        int r, n;
        r = sscanf(input, " %lf%n", &dblVal, &n);
        if(r == 1 && n == strlen(input))
            printf("%g", dblVal);
        else
            puts("Invalid input");
    }
}

暫無
暫無

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

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