72 lines
1.2 KiB
C
72 lines
1.2 KiB
C
|
/*
|
||
|
util.c
|
||
|
文字列操作のための関数群
|
||
|
(C)2012 B11T3074C, B11T3011K - MIT License
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#include <ctype.h>
|
||
|
|
||
|
// 文字列版tolower()
|
||
|
char *strtolower(char *s){
|
||
|
char *p;
|
||
|
|
||
|
for(p=s; *p != EOF; p++){
|
||
|
*p = tolower(*p);
|
||
|
}
|
||
|
return s;
|
||
|
}
|
||
|
|
||
|
// 1行入力
|
||
|
void input_line(char *buff, size_t size){
|
||
|
char *p;
|
||
|
if(fgets(buff, size, stdin) == NULL){
|
||
|
exit(1);
|
||
|
}
|
||
|
// 改行コードを削除
|
||
|
for(p=buff; *p != '\n'; p++);
|
||
|
*p = '\0';
|
||
|
}
|
||
|
|
||
|
// "y", "n"で選択("n"ならば0を返す)
|
||
|
int select_y(char ch){
|
||
|
char buff[1024];
|
||
|
|
||
|
for (;;){
|
||
|
input_line(buff, 1024);
|
||
|
strtolower(buff);
|
||
|
|
||
|
if (strcmp(buff, "y") == 0){
|
||
|
return 1;
|
||
|
}else if (strcmp(buff, "n") == 0){
|
||
|
return 0;
|
||
|
}else{
|
||
|
switch(ch){
|
||
|
case 'y':
|
||
|
case 'Y':
|
||
|
return 1;
|
||
|
case 'n':
|
||
|
case 'N':
|
||
|
return 0;
|
||
|
}
|
||
|
fputs("yまたはnを入力してください\n", stderr);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 文字列を入力(defstr:入力がないときデフォルトで返す文字列)
|
||
|
char *input_string(char *prompt, char *defstr){
|
||
|
char buff[1024];
|
||
|
|
||
|
printf("%s", prompt);
|
||
|
input_line(buff, 1024);
|
||
|
if(buff[0] != '\0'){
|
||
|
// 空でない場合
|
||
|
free(defstr);
|
||
|
return strdup(buff);
|
||
|
};
|
||
|
return defstr;
|
||
|
}
|