gpt4 book ai didi

c - 使用 for 循环、三元运算符和条件时出现意外的换行符

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:29 24 4
gpt4 key购买 nike

我知道有些函数会自动将换行符附加到它们的输出,但我遇到过不需要换行符的情况。我试图修复它并理解为什么它会以多种方式出现,但无济于事。这是我以前从未遇到过的输出问题。

我正在做一个非常基础的项目,来自 C Programming: A Modern Approach by K.N. 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 循环等,但它会产生相同的结果。它的发生似乎没有明确的原因。

最佳答案

fgets 在复制到目标 char 缓冲区的内容中包含换行符。因此,您的逐个字符打印例程将原封不动地传递给它。

fgets 在 Google 上的结果 #1:http://www.cplusplus.com/reference/cstdio/fgets/

A newline character makes fgets stop reading, but it is considered a valid character by the function and included in the string copied to str.

当然,在另一个答案中提到,你可以在打印时忽略它,或者提前将其置空。

关于c - 使用 for 循环、三元运算符和条件时出现意外的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36919706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com