2013-10-11 34 views
-1

我一直在構建一個程序,將一個模型文件類型轉換爲wavefront obj,但是當我的面孔寫入該文件時遇到了問題。int在字符串流中使用時返回長數字?

if(!strcmp(line , "TEX:TOP")) 
    { 
     i++; 
      TEX_TOP << "f " << i << "/" << i << "/" << i << " "; 
     i++; 
      TEX_TOP << TEX_TOP << i << "/" << i << "/" << i << " "; 
     i++; 
      TEX_TOP << TEX_TOP << i << "/" << i << "/" << i << " "; 
     i++; 
      TEX_TOP << TEX_TOP << i << "/" << i << "/" << i << "\n"; 
    } 

的這部分代碼是應該輸出..

˚F1/1/1 2/2/2 3/3/3 4/4/4

但出來作爲..

˚F1971327331/1971327331/1971327331 0x28f5a81971327332 /1971327332分之19713273320x28f5a81971327333 /1971327333分之19713273330x28f5a81971327334 /1971327334分之1971327334

我搜索了幾個小時,但仍無法找到自動對焦九。

編輯:感謝LihO,我的問題是我把TEX_TOP fstream對象放在每行的開頭,假設我重新聲明它,並且int必須從0開始才能數起來。

i = 0; 

    if(!strcmp(line , "TEX:TOP")) 
    { 
     i++; 
      TEX_TOP << i << "/" << i << "/" << i << " "; 
     i++; 
      TEX_TOP << i << "/" << i << "/" << i << " "; 
     i++; 
      TEX_TOP << i << "/" << i << "/" << i << " "; 
     i++; 
      TEX_TOP << i << "/" << i << "/" << i << "\n"; 
    } 
+0

您遺漏了很多重要的代碼,包括'i'的聲明和初始化以及'TEX_TOP'的定義。 –

+0

這些仍然是'int's,不應該與'long'數據類型混淆。 – nhgrif

+0

嗯,我認爲這是很好的,因爲我正在尋找stringstream中的int變量,因此不會出現這些部分。 – siba

回答

2

我假設你使用的是未初始化的變量導致未定義行爲

int i; 

嘗試,你開始的遞增值之前顯式零初始化:

int i = 0; 

另請注意,您正在通過fstream對象本身其operator<<

TEX_TOP << TEX_TOP << i << "/" << i << "/" << i << " "; 

這會導致額外的不利的東西出現在您的文件。只需將其更改爲:

TEX_TOP << i << "/" << i << "/" << i << " "; 
+0

那肯定是固定的int,但我似乎有一些......內存..指針?,如果我正確記住它們是什麼。像f 1/1/1 0x28f5a82/2/2 0x28f5a82/2/2 0x28f5a83/3/3 0x28f5a84/4/4 – siba

+0

這些文件會在文件的不同部分寫入其'steps',模型信息的不同部分,所以我需要循環通過一切,將它們應用於變量,然後在所有循環完成後寫入它們。 – siba

+0

@siba:現在查看我的答案(在行下) – LihO