K&R 演習1-17 解答 (プログラミング言語C 第2版)

スポンサーリンク

鍛錬 176

K&R 演習1-17 解答 (プログラミング言語C 第2版)

「80 字より長い行をすべて印字するプログラムを書け」という問題です。
 
プログラム

以下は、80 字より長い行をすべて印字するプログラム kr_1_17.c です。

// include
#include <stdio.h>

// preprocessor
#define MAXLINE 1000

// prototype
int my_getline(char line[], int maxline);

// main
int main(void)
{
	int len;
	char line[MAXLINE];
	
	while ((len = my_getline(line, MAXLINE)) > 0) {
		// 文字列長が80以上の場合
		if (len > 80) {
			printf("入力行の長さ = %d\n", len);
			printf("入力行のテキスト = %s", line);
			printf("\n");
		}
	}
	
	return 0;
}

// =====================================
// @brief      行を取得し,その長さを返す
// @param[in]  lim  入力行の最大長
// @param[out] s    取得した行
// @return     i -> 取得した行の長さ
// @note       無し
// =====================================
int my_getline(char s[], int lim)
{
	int c, i;
	
	for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
		s[i] = c;
	if (c == '\n') {
		s[i] = c;
		++i;
	}
	
	s[i] = '\0';
	
	return i;
}

 
実行結果

以下は、プログラム kr_1_17.c を次に示す順序で実行しています。

  1. 81 文字(改行を含む)を入力
  2. 80 文字(改行を含む)を入力
  3. 91 文字(改行を含む)を入力
***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra kr_1_17.c -o kr_1_17
***@ubuntu:~/***/test/c$ ./kr_1_17
123456789a123456789a123456789a123456789a123456789a123456789a123456789a123456789a
入力行の長さ = 81
入力行のテキスト = 123456789a123456789a123456789a123456789a123456789a123456789a123456789a123456789a

123456789a123456789a123456789a123456789a123456789a123456789a123456789a123456789

123456789a123456789a123456789a123456789a123456789a123456789a123456789a123456789a123456789a
入力行の長さ = 91
入力行のテキスト = 123456789a123456789a123456789a123456789a123456789a123456789a123456789a123456789a123456789a

 
上記に示した通り、2 回目に入力した 80 文字は、「80 文字より長い行」という条件に含まれないため、印字されていません。

タイトルとURLをコピーしました