[英]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()
可以轉換,為一個成功的double
或float
,因為“V '不是以字符串形式顯示的任何有效浮點數的一部分。
你應該檢查sscanf()
的返回值; 它會說0(沒有成功的轉換),從而告訴你出了問題。
你可能成功:
if (sscanf(line+1, "%f", &v1) != 1)
...error...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.