一部の関数は自動的に改行を出力に追加しますが、改行が必要でないシナリオが発生しました。私はそれを修正しようとしたのですが、なぜそれが多くの方法で発生するのか理解できませんが、役に立たないのです。これは以前経験したことのない出力問題です。forループ、三項演算子および条件を使用すると予期しない改行が発生する
私は非常に基本的なプロジェクトをから行っています。Cプログラミング:現代的アプローチ by K.N.キング、第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ループは使用しませんでしたが、同じ結果が得られます。その発生の明白な理由はないようです。
それを片付けてくれてありがとう@underscore_dは、私はfgetsの中に自動的に付加改行()の関数リファレンスを見逃している必要があります。 –
そのコードブロックは、正確に何を段階的に達成していますか?途中で完璧に動作しましたので、ありがとうございます。私はちょうど私がそれを使用する前にその機能を理解していることを確認したい。 –
@ GabrielSaul私はいくつかの説明を追加しました。 – MikeCAT