はじめましてこんばんは
C言語初心者のOTという者です。
調べても分からないことがありましたので2つほど質問させていただきます。(調べ方が悪いのかもしれません…)
現在、私はC言語の課題を進めています。その中で、
[getchar関数で入力した文字を配列に格納させる]
という処理をさせなければいけない箇所があるのですが、
どういうをコードを書いたらいいのかわかりません。
なのでgetcharを使った配列への代入方法を教えてください。
もう一つの質問は、C言語初心者におすすめの書籍を教えてください。
よろしくおねがいします。
getcharを使った配列への代入
Re: getcharを使った配列への代入
具体的にどういう処理をしたいのかがわからないですが、代入するだけなら普通に代入すればいいでしょう。OT さんが書きました:現在、私はC言語の課題を進めています。その中で、
[getchar関数で入力した文字を配列に格納させる]
という処理をさせなければいけない箇所があるのですが、
どういうをコードを書いたらいいのかわかりません。
なのでgetcharを使った配列への代入方法を教えてください。
すみません、私にはよくわからないので他の人に聞いてください。OT さんが書きました:もう一つの質問は、C言語初心者におすすめの書籍を教えてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: getcharを使った配列への代入
みけCATさん
お返事ありがとうございます。
私が言葉足らず過ぎたため意図した回答は得られませんでした、申し訳ないです。
仕様は下記のになっていましてgetcharを使わないでgetsを使うことでならなんとか作成することが出来ました。
ですがgetcharを使うとよくわからないことになってしまいます。
キーボードで入力した文字列を加工して表示するプログラムを
作成してください。
・入力できる最大文字数は半角20文字とする。
・入力したものは配列に格納する。
・文字数が半角20文字でない場合も20文字表示する。
・文字数が足らない部分はピリオドを表示する。
・20文字以上を入力した場合でも、配列サイズを超えることが無いようにする。
・キーボードからの入力は、getchar()関数を使用する。
getcharを使おうとするとコードが複雑になっていき、自分が今なにをやっているのかわからなくなる始末です。
そんなに難しい事では無いかもしれませんが知恵をお貸しいただきたいです。
超初心者さん
返信ありがとうございます。
言葉足らずでしたのに察していただいてありがとうございます。
私もその書き方にまではたどり着きました…
ですがif文のコードブロックのところで指定した文字数を入力するまで処理を終われないみたいです。
20文字未満の文字を入力した時にも処理が進むコードがわからないのでよろしければ教えていただきたいです。
お返事ありがとうございます。
私が言葉足らず過ぎたため意図した回答は得られませんでした、申し訳ないです。
仕様は下記のになっていましてgetcharを使わないでgetsを使うことでならなんとか作成することが出来ました。
ですがgetcharを使うとよくわからないことになってしまいます。
キーボードで入力した文字列を加工して表示するプログラムを
作成してください。
・入力できる最大文字数は半角20文字とする。
・入力したものは配列に格納する。
・文字数が半角20文字でない場合も20文字表示する。
・文字数が足らない部分はピリオドを表示する。
・20文字以上を入力した場合でも、配列サイズを超えることが無いようにする。
・キーボードからの入力は、getchar()関数を使用する。
getcharを使おうとするとコードが複雑になっていき、自分が今なにをやっているのかわからなくなる始末です。
そんなに難しい事では無いかもしれませんが知恵をお貸しいただきたいです。
超初心者さん
返信ありがとうございます。
言葉足らずでしたのに察していただいてありがとうございます。
私もその書き方にまではたどり着きました…
ですがif文のコードブロックのところで指定した文字数を入力するまで処理を終われないみたいです。
20文字未満の文字を入力した時にも処理が進むコードがわからないのでよろしければ教えていただきたいです。
Re: getcharを使った配列への代入
本当ですか!?getsを使っているのに配列サイズを超えることが無いなんて、xv6上で動くアプリケーションの開発をしているのですか?OT さんが書きました:仕様は下記のになっていましてgetcharを使わないでgetsを使うことでならなんとか作成することが出来ました。
(中略)
・20文字以上を入力した場合でも、配列サイズを超えることが無いようにする。
[hr]
とりあえずxv6ではなく、「普通」のWindowsやLinuxなどをターゲットにした、getchar()を使ってstdinから1行読み込むプログラムです。
改行文字はバッファに書き込みません。バッファに入りきらない文字は捨てられます。
戻り値は入力された文字数、1文字も読み込まずにEOFだった場合は-1を返します。
#include <stdio.h>
int get_one_line(char *out, int buffer_size) {
int len = 0;
for(;;) {
int input = getchar();
if (input == EOF) {
if (len < buffer_size) out[len] = '\0';
if (len == 0) return -1; else return len;
} else if (input == '\n') {
if (len < buffer_size) out[len] = '\0';
return len;
} else {
if (len + 1 < buffer_size) out[len] = input;
else if (len + 1 == buffer_size) out[len] = '\0';
len++;
}
}
}
int main(void) {
char buf[21];
int len = get_one_line(buf, sizeof(buf));
printf("length = %d\nstr = %s\n", len, buf);
return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)