據我所知,有些函數會自動將換行符附加到它們的輸出中,但我遇到了不希望換行符的場景。我試圖解決它,並理解它爲什麼以多種方式發生,但無濟於事。這是我以前沒有經歷過的輸出問題。使用for循環,三元運算符和條件發生意外換行
我正在做一個非常基礎的項目C編程:現代方法 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循環,但它會得到相同的結果。似乎沒有明確的原因。
@underscore_d感謝您在清除了,我一定是錯過了與fgets自動添加的換行符()的函數引用。 –
那麼代碼塊究竟是一步步完成的呢?它順利地完成了工作,所以非常感謝。我只想確保在使用它之前瞭解它的功能。 –
@GabrielSaul我加了一些解釋。 – MikeCAT