Input: Hello there boy(any 80 character string)
Expected output: boy there Hello
Current output: (nothing - does compile though) \
私のハードウェアプロンプト:
1 つ以上のスペースで区切られた単語のシーケンスをユーザーに求めるプログラムを作成します。各単語は英数字のシーケンスです。入力されたテキスト文字列の長さは 80 文字以下であり、各単語の長さは 20 文字以下であると想定できます。fgets() コマンドを使用して、入力テキスト文字列を読み取ります。たとえば、char 配列 char 文 [81]; を宣言できます。次に fgets(sentence,81,stdin); を使用します。標準入力 stdin (つまり、キーボード入力) から最大 80 文字を文字配列 文 [] に読み込みます。これにより、配列の最後にヌル文字 (文字列終了文字) も挿入されます。これが、配列が入力されたテキストよりも 1 バイト長くなる必要がある理由です。プログラムは、各単語間にスペースを 1 つだけ入れて入力したとおりに、逆の順序で単語を出力する必要があります。句読点や制御文字が入力されていないと想定できます。プログラムは reverse_words.c という名前にする必要があり、出力は以下の例に示す出力と正確に一致する必要があります。
私は他の例を見て、私が知っていることを使ってこのプログラムを作成しようとしました。私にはうまくいくように見えますが、うまくいきません。誰かが私のロジックがオフになっている場所を見つけるのを手伝ってくれませんか?
#include <stdio.h>
int main()
{
char sentence[81];
char space[81];
int i , h = 0, j, start;
printf("Enter a sentance (up to 80 characters): ");
fgets(sentence,81,stdin);
//starting backwards go from element 80 to find first non space
//make array to store element numbers of sentence in new array
for(i = 80; i >= 0; i--)
{
if(sentence[i] != ' ' || sentence[i] != '\0')
{ start = i;
//printf("%i", start);
}
if(i < start && i == ' ')
{
space[h] = i;
h++;
}
}
h = 0;
//start at first space and print characters till next space, repeat till all words printed
for( j = space[h]; j < space[h + 1]; h++)
{
printf("%c", sentence[j]);
if (j == space[h + 1])
printf(" ");
}
return 0;
}