文字行を読み取り、行内の各単語を別々の行に出力するプログラムを C で作成したいと考えています。
これは私が持っているものです:
char C;
printf("Write some characters: ");
scanf_s("%c",&C);
printf("%c",C);
ご覧のとおり、if ステートメントと for ステートメントのどちらを使用する必要があるのか わからないため、やりたいことから始めていません。
文字行を読み取り、行内の各単語を別々の行に出力するプログラムを C で作成したいと考えています。
これは私が持っているものです:
char C;
printf("Write some characters: ");
scanf_s("%c",&C);
printf("%c",C);
ご覧のとおり、if ステートメントと for ステートメントのどちらを使用する必要があるのか わからないため、やりたいことから始めていません。
まず、文字の行全体を読み取る必要があり、1 文字だけを読み取っています。
#include <stdio.h>
#include <string.h>
int main()
{
int k;
char line[1024];
char *p = line; // p points to the beginning of the line
// Read the line!
if (fgets(line, sizeof(line), stdin)) {
// We have a line here, now we will iterate, and we
// will print word by word:
while(1){
char word[256] = {0};
int i = 0;
// we are always using new word buffer,
// but we don't reset p pointer!
// We will copy character by character from line
// until we get to the space character (or end of the line,
// or end of the string).
while(*p != ' ' && *p != '\0' && *p != '\n')
{
// check if the word is larger than our word buffer - don't allow
// overflows! -1 is because we start indexing from 0, and we need
// last element to place '\0' character!
if(i == sizeof(word) - 1)
break;
word[i++] = *p;
p++;
}
// Close the string
word[i] = '\0';
// Check for the end of the original string
if(*p == '\0')
break;
// Move p to the next word
p++;
// Print it out:
printf("%s\n", word);
}
}
return 0;
}
行内に複数のスペースが一緒にある場合、問題を解決できるようにします。これがどのように行われるかを理解すれば、それほど難しいことではありません。