【发布时间】:2016-04-28 15:53:45
【问题描述】:
我了解某些函数会自动将换行符附加到其输出中,但我遇到了不需要换行符的情况。我试图修复它并理解为什么它以多种方式发生,但无济于事。这是我以前没有遇到过的输出问题。
我正在做一个非常基础的项目,来自 K.N. 的 C Programming: A Modern Approach。 King,第 8 章,项目 6:“B1FF 过滤器”,其中某些字符被转换和打印。我使用三元运算符结合条件来获得适当的输出。这是程序:
/* C Programming: A Modern Approach
Chapter 8: Arrays, Project 5: B1FF filter
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
char message[50];
int msg_len;
printf("Enter message: ");
fgets(message, 50, stdin);
msg_len = strlen(message);
printf("In B1FF-speak: ");
for (int i = 0; i < msg_len; i++)
{
message[i] = toupper(message[i]);
if (message[i] == 'A' || message[i] == 'B')
printf("%c", (message[i] == 'A') ? '4' : '8');
else if (message[i] == 'E' || message[i] == 'I')
printf("%c", (message[i] == 'E') ? '3' : '1');
else if (message[i] == 'O' || message[i] == 'S')
printf("%c", (message[i] == 'O') ? '0' : '5');
else
printf("%c", message[i]);
if (i == (msg_len - 1))
{
for (int j = 0; j < 10; j++)
printf("!");
printf("\n");
}
}
return 0;
}
输出不是预期的:
Enter message: C is rilly cool
In B1FF-speak: C 15 R1LLY C00L
!!!!!!!!!!
为什么修改后的字符串和感叹号之间有换行符?我已经明确指定在打印所有文本之后,就在循环终止之前出现换行符。我尝试过更改,例如在循环外打印换行符,不使用 for 循环作为感叹号等,但它会产生相同的结果。它的发生似乎没有明确的原因。
【问题讨论】: