2014-03-12 43 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]); 

}

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

编辑:你们可以试试这个,告诉我你是否得到正常结果?我无法理解发生的错误,所以我无法克服它......也许其他一些例子会让我知道错误在哪里。