標準入力から文字を読み込む【その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; }
同一関数内で処理しているからやっていないけれど、関数化する場合はヒープの確保を意識しないといけなくなるな。