簡體   English   中英

關於sscanf的困惑

[英]Confusion about sscanf

我想從一行文件中讀取浮點數(以及之后的整數)。 當我調試它時,我可以看到它從文件中刪除線條沒有問題,但是當我嘗試sscanf它時,我會得到垃圾。 這是我的代碼:

    while(fgets(line, 1000, file) != EOF)
    {
        //Get the first character of the line
        c = line[0];

        if(c == 'v')
        {
            sscanf(line, "%f", &v1);
            printf("%f", v1);
        }
    }

存儲在v1中的值是垃圾。 為什么這不起作用,我如何從這一行中獲得浮動和整數?

你在sscanf的調用中包含了第一個字符(即'v'),因此調用失敗並且v1保持不變(其中包含垃圾)。 試試這個:

sscanf(line+1, "%f", &v1);

據推測v1是浮動?

在這種情況下,在內存中打印一個浮點就好像它是一個'c'字符串將是壞的..
您可能想嘗試printf("%f",v1);

    if(c == 'v')
    {
        sscanf(line, "%f", &v1);

如果行以'v'開頭,那么你將它發送給scanf並要求它將其轉換為浮點數? 你可能想要移動一個角色(如果你有其他填充,或者更多,然后開始在第[1]行讀取浮點數)?

您的printf語句應如下所示:

printf("%f\n", v1);

此外,您應該檢查sscanf的返回值,以檢查它是否找到並存儲浮點數:

if(sscanf(line, "%f", &v1) < 1){
    /* didn't read float */
}else{
    printf("%f\n", v1);
}

既然你知道當你執行sscanf()調用的第一個字符line是字母“V”,你也可以告訴大家,有沒有辦法sscanf()可以轉換,為一個成功的doublefloat ,因為“V '不是以字符串形式顯示的任何有效浮點數的一部分。

你應該檢查sscanf()的返回值; 它會說0(沒有成功的轉換),從而告訴你出了問題。

你可能成功:

if (sscanf(line+1, "%f", &v1) != 1)
    ...error...

暫無
暫無

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

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