2014-03-12 45 views
1

我在使用printf說明符時遇到了一些問題......所以在問你們之前,我幾乎讀了所有關於C++Reference page的東西,但是不能解決問題,而且因爲我是新手,甚至無法理解問題,所以最有可能的語法錯誤,但我找不到它...格式 - 說明符語法錯誤?

for(i = 1; i <= 10; i++) { 
    printf("\n%d.%s%n",i,names[i-1],offset); 
    printf("%*s%.2f TL",10-offset," ",prices[i-1]); 
} 

所以基本上我有這個代碼來打印一個列表,我想價格從同一列開始。 對於如:

  1. 水1.00
  2. OJ 1.00

後面我的代碼邏輯(櫃面不是很明顯,我無法判斷它是)是:

  • 打印標識號和名稱,統計我們迄今爲止編寫的字符數量並將其分配給偏移量。
  • 打印(起始價格表的列)價格

前偏移處的空間,一旦我無法得到我想要的結果,我檢查,發現了偏移3所有名稱是不是這樣的(並且在此過程之前沒有賦值偏移量)。

感謝您的幫助!

PS:這是一個練習代碼,目的是爲了更好地使用說明符。

編輯: 所以我這樣做:

for(i=1;i<=10;i++) 

{

printf("%d.%s%n",i,names[i-1],&offset); 
printf("%*s%.2f TL\n",10-offset," ",prices[i-1]); 

}

但我得到的結果是巨大的空黑屏幕命令。

+0

printf是C,首選的構造是cout << ...;'在C++中。 – hd1

+0

我很困惑,是的即時通訊工作在c上,但由於C++參考頁面上有一個C++參考指南,我認爲這裏可以問一下 – user3402183

+0

@ user3402183肯定是。 printf是完全有效的C++。它在標準標題中,參見。標準草案27.9.2。 –

回答

1

%n格式說明符需要一個指針。您的代碼缺少&運營商偏移:

printf("\n%d.%s%n",i,names[i-1],&offset); 

好醇」 C接口不知道您提供什麼類型的printf所以它不抱怨,並愉快地讀取的偏移上的4個字節的整數值堆棧作爲內存位置 - >核心轉儲。

其實,g ++帶-Wall 確實是警告。所以

  • hd1在這裏有一個點,因爲C + +輸出是類型安全的(即使這是一個痛苦);
  • 注意你的警告。
+0

遲到2秒!禮貌upvote –

+0

出乎意料,我不能回答我自己的問題,所以告訴你,我已經嘗試瞭解決方案,但仍然失敗,我留下這個評論。(編輯問題) – user3402183

0

當您以printf格式使用%n時,相應的參數必須是指針。 printf將存儲您指向的int中的信息。

假設您在某處宣佈了int offset,則應該使用&offset作爲printf調用中的最後一個參數。

雖然我們在這裏,請允許我在此摘錄評論:

printf("\n 

哎呀NO! Newline是一個終結者。它走在一條線的盡頭,而不是開始。

+0

感謝您的信息,我立即修復它! ^^ – user3402183

0

,所以我這樣做:

for(i=1;i<=10;i++) 

{

printf("%d.%s%n",i,names[i-1],&offset); 
printf("%*s%.2f TL\n",10-offset," ",prices[i-1]); 

}

但我得到的結果是巨大的空黑屏幕命令。

編輯:你們可以試試這個,告訴我你是否得到正常結果?我無法理解發生的錯誤,所以我無法克服它......也許其他一些例子會讓我知道錯誤在哪裏。