Shammer's Philosophy

My private adversaria

標準入力から文字を読み込む【その4】

標準入力から文字を読み込む際、標準入力から文字列を読み込む【その3】 - Shammerismの通り、一時的に文字列の入力を受け取る buffer を普通に用意することに。単純に fgets で読み込ませてみたが、

#include <stdio.h>

int main(int argc, char * args[]){
    char value[1024];
    printf("Type:");
    fgets(value, 1024, stdin);
    printf("Value:%s\n",value);
    return 0;
}

実行してみると、入力文字決定の際の改行まで出力してしまうことがわかった。最後の改行を無視するようにしないといけない。fgets を使用しないで書くとこんな感じか。

#include <stdio.h>

int main(int argc, char* args[]){
    char value[1024];
    int i;
    printf("Type:");
    for( i = 0 ; i < 1024 ; i++ ){
	char c = getchar();
	if( c != 10 ){
	    value[i] = c;
	}
	else {
	    value[i] = '\0';
	    break;
	}
	printf("%c\n",c);
    }
    printf("%s length is %d\n",value, i);
    return 0;
}

fgets を使用して最後の改行を取り除く場合はこんな感じか。

#include <stdio.h>
#include <string.h>

int main(int argc, char * args[]){
    char temp[1024];
    printf("Type:");
    fgets(temp, 1024, stdin);
    int len = strlen(temp);
    char value[len];
    int i = 0;
    while( 1 ){
	if( temp[i] == '\n' ){
	    value[i] = '\0';
	    break;
	}
	else {
	    value[i] = temp[i];
	    i = i + 1;
	}	    
    }
    printf("Value:%s\n",value);
    return 0;
}

同一関数内で処理しているからやっていないけれど、関数化する場合はヒープの確保を意識しないといけなくなるな。