【发布时间】:2016-02-27 12:43:49
【问题描述】:
我的程序中有这些行:
printf("%-29s\n",("%s, Capital", CO));
printf("%-29s\n",("%s, Drawing",CO));
当我运行程序时,它只显示 %s 等效项 (CO) 而不是 "%s, Drawing"
请帮忙?
【问题讨论】:
-
你想要的输出是什么?
我的程序中有这些行:
printf("%-29s\n",("%s, Capital", CO));
printf("%-29s\n",("%s, Drawing",CO));
当我运行程序时,它只显示 %s 等效项 (CO) 而不是 "%s, Drawing"
请帮忙?
【问题讨论】:
你使用了逗号,行为正常。
带有逗号运算符A, B 的表达式表示首先计算A,忽略其结果,然后计算B,逗号运算符的结果将是它的值。
如果你想显示“%s, Drawing”,打印出来。
printf("%-29s\n","%s, Drawing");
【讨论】:
正如 MikeCAT 已经说过的,您使用了逗号运算符。如果你想左对齐复合字符串,你可以先用snprintf打印到一个临时缓冲区来实现它:
char tmp[30];
snprintf(tmp, sizeof(tmp), "%s, Capital", CO);
printf("|%-29s|", tmp);
snprintf(tmp, sizeof(tmp), "%s, Drawing", CO);
printf("|%-29s|", tmp);
当然,考虑到您直接在字符串之后打印换行符(因此证明有点毫无意义),您还不如直接打印所需的格式:
printf("%s, Capital\n", CO);
printf("%s, Drawing\n",CO);
【讨论】: