#3
by あたっしゅ » 3年前
東上☆海美☆「
test.txt
を作って、コンソールから
と、やった時、
コード:
Enter words : 3i=0, "aaa"=3
2i=1, "bb"=2
1i=2, "c"=1
Dump stored words :
0:aaa
1:bb
2:c
Bye....
となるけど、『普通にコンソール入力すると、"Dump stored words :"が出ない』ということが言いたいみみ ?
生のコンソール入力 stdin だと、Ctrl+C 入れると、プログラムが中断しちゃうから。
それなら try { } catch(...) { } で囲んでやればいいみみ ?
コード:
//
// https://dixq.net/forum/viewtopic.php?f=3&t=21350&sid=4cfa1a6250116c5fc5248ca78e64f35b
// getcharによる文字列入力 - ミクプラ(ja)
//
// ConsoleApplication1.cpp : このファイルには 'main' 関数が含まれています。プログラム実行の開始と終了がそこで行われます。
//
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define WORDLEN 64
#define WORDNUM 200
#define IN 1
#define OUT 0
int
readword(char word[WORDLEN]) {
char cc;
int i, flag;
flag = OUT;
i = 0;
while (!feof(stdin)) {
cc = getchar();
if (isalpha(cc) || isdigit(cc)) { /* you may use "isalnum()" */
flag = IN;
word[i] = cc;
i++;
if (i >= WORDLEN) { // 間違いではないが、わかりやすいように { を追加した。
return 0;
} // 間違いではないが、わかりやすいように } を追加した。
}
else if (flag == IN) {
word[i] = '\0';
return i;
}
}
return EOF;
}
int
main(void) {
char words[WORDNUM][WORDLEN];
int i, j;
int lengh;
i = 0;
try { // 追加
printf("Enter words : ");
while (!feof(stdin)) {
lengh = readword(words[i]);
printf("%d", lengh);
if (lengh == 0) { // 間違いではないが、わかりやすいように { を追加した。
printf("No more space in readword !!!\n");
/* Normally, you shold use fprintf(stderr, ....) at caution. */
} // 間違いではないが、わかりやすいように } を追加した。
else if (lengh == EOF) { // 間違いではないが、わかりやすいように { を追加した。
printf("End of file!!!\n");
} // 間違いではないが、わかりやすいように } を追加した。
else {
printf("i=%d, \"%s\"=%d\n", i, words[i], lengh);
i++;
}
}
} // 追加
catch(...) { // 追加
// void // 追加
} // 追加
printf("Dump stored words : \n");
for (j = 0; j < i; j++) { // 間違いではないが、わかりやすいように } を追加した。
printf("%d:%s\n", j, words[j]);
} // 間違いではないが、わかりやすいように } を追加した。
printf("\nBye....\n");
return 0;
}
// end.
.cpp モードじゃないと、だめみみ ?
」
東上☆海美☆「
test.txt
[code]
aaa bb c
[/code]
を作って、コンソールから
[code]
./main < test.txt
[/code]
と、やった時、
[code]
Enter words : 3i=0, "aaa"=3
2i=1, "bb"=2
1i=2, "c"=1
Dump stored words :
0:aaa
1:bb
2:c
Bye....
[/code]
となるけど、『普通にコンソール入力すると、"Dump stored words :"が出ない』ということが言いたいみみ ?
生のコンソール入力 stdin だと、Ctrl+C 入れると、プログラムが中断しちゃうから。
それなら try { } catch(...) { } で囲んでやればいいみみ ?
[code]
//
// https://dixq.net/forum/viewtopic.php?f=3&t=21350&sid=4cfa1a6250116c5fc5248ca78e64f35b
// getcharによる文字列入力 - ミクプラ(ja)
//
// ConsoleApplication1.cpp : このファイルには 'main' 関数が含まれています。プログラム実行の開始と終了がそこで行われます。
//
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define WORDLEN 64
#define WORDNUM 200
#define IN 1
#define OUT 0
int
readword(char word[WORDLEN]) {
char cc;
int i, flag;
flag = OUT;
i = 0;
while (!feof(stdin)) {
cc = getchar();
if (isalpha(cc) || isdigit(cc)) { /* you may use "isalnum()" */
flag = IN;
word[i] = cc;
i++;
if (i >= WORDLEN) { // 間違いではないが、わかりやすいように { を追加した。
return 0;
} // 間違いではないが、わかりやすいように } を追加した。
}
else if (flag == IN) {
word[i] = '\0';
return i;
}
}
return EOF;
}
int
main(void) {
char words[WORDNUM][WORDLEN];
int i, j;
int lengh;
i = 0;
try { // 追加
printf("Enter words : ");
while (!feof(stdin)) {
lengh = readword(words[i]);
printf("%d", lengh);
if (lengh == 0) { // 間違いではないが、わかりやすいように { を追加した。
printf("No more space in readword !!!\n");
/* Normally, you shold use fprintf(stderr, ....) at caution. */
} // 間違いではないが、わかりやすいように } を追加した。
else if (lengh == EOF) { // 間違いではないが、わかりやすいように { を追加した。
printf("End of file!!!\n");
} // 間違いではないが、わかりやすいように } を追加した。
else {
printf("i=%d, \"%s\"=%d\n", i, words[i], lengh);
i++;
}
}
} // 追加
catch(...) { // 追加
// void // 追加
} // 追加
printf("Dump stored words : \n");
for (j = 0; j < i; j++) { // 間違いではないが、わかりやすいように } を追加した。
printf("%d:%s\n", j, words[j]);
} // 間違いではないが、わかりやすいように } を追加した。
printf("\nBye....\n");
return 0;
}
// end.
[/code]
.cpp モードじゃないと、だめみみ ?
」