文字列入力の受信、文字、文字数、列数の出力


#include<stdio.h>
#include<limits.h>
#include<stdlib.h>
#include <float.h>
#include <stdbool.h>
#include <complex.h>
#include <string.h>
#include <math.h>
#include<stdbool.h>
#include<ctype.h>
#define STOP '.'

int main()
{
char c;
int n_chars = 0;
int n_lines = 1;
int n_words = 1;
bool word_flag = false;
bool word_flag1 = false;
printf("Enter text:\n");
while ((c = getchar()) != STOP) {

	if (c == '\n')
		n_lines++;
	if (isspace(c))
		word_flag = true;
	if (word_flag && !isspace(c) && word_flag1)
	{
		n_words++;
		word_flag = false;
		word_flag1 = false;
	}
	if (!isspace(c))
	{
		n_chars++;
		word_flag1 = true;
	}
}

if (n_chars == 0) {
	n_words = 0;
}

printf("Characters = %d, Words = %d, Lines = %d\n", n_chars, n_words, n_lines);
return 0;
}
文字列を入力すると、文字、単語、列数のプログラムが出力されます.
getchar()で文字列を受信する場合STOP(.)句点に出会うまで、無限の周りを回ります.
if (c == '\n')
n_lines++;
改行が発生した場合は+1カラムです.
if (isspace(c))
word_flag = true;
スペースに遭遇した場合は、word flagをtrueに変換します.△何度かスペースを入力したり、単語を書いたりするので、旗の役割を果たす変数word flagを作成します.
if (word_flag && !isspace(c) && word_flag1)
{
n_words++;
word_flag = false;
word_flag1 = false;
}
単語flagとword flag 1がtrueの場合、単語+1とword flagとword flag 1をfalseに再変換します.word flagはtrueにスペースが必要で、word flag 1はtrueに改行または書き込み文字が必要です.つまり、改行や文字を区切って入力するだけで、単語は+1になります.
if (!isspace(c))
{
n_chars++;
word_flag1 = true;
}
入力した文字がスペースでない場合は+1を使用し続け、word flag 1をtrueに変換します.
if (n_chars == 0) {
n_words = 0;
}
intn wordsの初期値は1なので、何も入力せずに句点のみ入力し、終了時に単語の個数を0に変更します.

結果ウィンドウ

改行時

何も入力しないで終わる