開発環境 Microsoft Visual C++ 2010 Express (SP1)
実行環境 Microsoft Windows XP Home Edition (SP3)
プロジェクトの種類 Win32 コンソール アプリケーション
プロジェクト名 input
アプリケーションの種類 コンソール アプリケーション
追加のオプション 空のプロジェクト




input1.c
#include <ctype.h>
#include <stdio.h>
 
int main()
{
	int i;
 
	while (1) {
		i = getchar();
		if (i == EOF) break;
		printf("%02x %c\n", i, isprint(i) ? i : '?');
	}
	return 0;
}
 

出力
a[Enter]
61 a
0a ?
あ[Enter]
82 ?
a0 ?
0a ?
^Z[Enter]



input2.c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
	char buf[10+1];
	char *p;
 
	while (1) {
		printf("(Ctrl-Zで終了)>");
		p = fgets(buf, _countof(buf), stdin);
		if (p == NULL) break;
		printf("[%s]\n", buf);
	}
	return 0;
}
 

出力
(Ctrl-Zで終了)>aaa bbb ccc[Enter]
[aaa bbb cc]
(Ctrl-Zで終了)>[c
]
(Ctrl-Zで終了)>[Enter]
[
]
(Ctrl-Zで終了)>^Z[Enter]

考察
  • 残りの文字列が入力ストリーム上に残ってしまう
  • 改行文字も格納される



input3.c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
int main()
{
	char buf[10+1];
	int i;
 
	while (1) {
		printf("(Ctrl-Zで終了)>");
		i = scanf("%10[^\n]%*[^\n]", buf);
		if (i == EOF) break;
		getchar();
		if (i != 1) continue;
		printf("[%s]\n", buf);
	}
	return 0;
}
 

出力
(Ctrl-Zで終了)>aaa bbb ccc[Enter]
[aaa bbb cc]
(Ctrl-Zで終了)>[Enter]
(Ctrl-Zで終了)>^Z[Enter]



input4.c
// Unicode 文字セット
#include <locale.h>	// LC_CTYPE
#include <stdio.h>	// EOF
#include <stdlib.h>	// _countof()
#include <tchar.h>
 
int main()
{
	_TCHAR buf[10+1];
	int i;
 
	_tsetlocale(LC_CTYPE, _T(""));
 
	while (1) {
		_tprintf(_T("(Ctrl-Zで終了)>"));
		i = _tscanf_s(_T("%10[^\n]%*[^\n]"), buf, _countof(buf));
		if (i == EOF) break;
		_gettchar();
		if (i != 1) continue;
		_tprintf(_T("[%s]\n"), buf);
	}
	return 0;
}
 

出力
(Ctrl-Zで終了)>aaa bbb ccc[Enter]
[aaa bbb cc]
(Ctrl-Zで終了)>あああ いいい ううう[Enter]
[あああ いいい うう]
(Ctrl-Zで終了)>[Enter]
(Ctrl-Zで終了)>^Z[Enter]
最終更新:2012年09月04日 15:03