-5

文字行を読み取り、行内の各単語を別々の行に出力するプログラムを C で作成したいと考えています。

これは私が持っているものです:

char C;

printf("Write some characters: ");
scanf_s("%c",&C);
printf("%c",C);

ご覧のとおり、if ステートメントと for ステートメントのどちらを使用する必要があるのか​​ わからないため、やりたいことから始めていません。

4

3 に答える 3

2

まず、文字の行全体を読み取る必要があり、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;
}

行内に複数のスペースが一緒にある場合、問題を解決できるようにします。これがどのように行われるかを理解すれば、それほど難しいことではありません。

于 2013-09-08T17:02:51.277 に答える