程式任務——
輸入一個字串,在螢屏上逐字顯示。
問題是如果你在單詞之間輸入很多空格,它們會在你檢查時顯示出來。如何解決這個問題?
#include <stdio.h>
int main()
{
int inw = 0, i = 0, count = 0;
char s[10000];
printf("Print string (max 10000 sb):\n");
gets(s);
while (s[i] != '\0') {
if (s[i] != ' ' && s[i] != '\t') {
putchar(s[i]);
}
else if (s[i] == ' ') {
printf("\n");
}
i ;
}
return 0;
}
uj5u.com熱心網友回復:
丑陋,但這完成了作業。只需要一個標志來跟蹤您是否剛剛列印了一個新行。還清理了未使用的變數并改為使用fgets
#include <stdio.h>
#include <stdbool.h>
int main()
{
int i = 0;
char s[10000];
bool justPrintedNewline = false;
printf("Print string (max 10000 sb):\n");
fgets(s, sizeof s, stdin);
while (s[i] != '\0') {
if (s[i] != ' ' && s[i] != '\t') {
putchar(s[i]);
justPrintedNewline = false;
}
else if (s[i] == ' ' && justPrintedNewline == false) {
printf("\n");
justPrintedNewline = true;
}
i ;
}
return 0;
}
演示
uj5u.com熱心網友回復:
你在演算法上做得很好,只是修復了一個小問題。您可以創建一個標志,然后在空格之后將標志增加到 1。然后您就會知道您將只列印一個空格。列印“”后,檢查一個不是“”的字符,將標志更新為 0。當標志為 1 時,不要列印任何內容,等待另一個有效字符。保重,奧利
uj5u.com熱心網友回復:
僅在開始單詞時列印換行符,并在完成后列印。
將代碼更改為:
如果有空格
——當前一個字符是非空格時列印 '\n'。
否則
-- 如果(前一個字符是空白)列印一個 '\n'
-- 列印它
char prior = 'a';
while (s[i]) {
char ch = s[i];
if (ch != ' ' && ch != '\t') {
if (prior == ' ' || prior == '\t') {
putchar('\n');
}
putchar(ch);
}
prior = ch;
i ;
}
putchar('\n');
uj5u.com熱心網友回復:
它有一個技巧:使用第二個內部回圈跳過空格,然后使用另一個回圈列印單詞。只有當您到達字串的末尾時,外回圈才應終止。
while (s[i] != '\0')
{
// skip all spaces
while ((s[i] != '\0') && isspace( s[i] )) i;
// print the word
while ((s[i] != '\0') && !isspace( s[i] ))
{
putchar( s[i] );
}
// print the newline after a word
putchar( '\n' );
}
順便說一句,這gets()是一個非常非常危險的功能。它不應該包含在語言中。您可以將它用于家庭作業,但實際上您應該使用fgets().
char s[1000];
fgets( s, sizeof(s), stdin );
該fgets()函式使用起來比 更繁瑣gets(),但上面的代碼段對你有用。
解決此作業的另一個選擇是使用
標籤:C 上一篇:不改變值的引數數量的資料驗證 下一篇:C語言保存/加載功能scanf()從用戶輸入中一次讀取一個單詞,并通過回圈每次列印。我會把它留給你查查。不要忘記在格式說明符中指定最大字串長度。例如,一個 100 個字符的陣列最多是 99 個字符的字串,因此您可以將其"
