επιστημη(@episteme) の回答履歴
![](https://gazo.okwave.jp/okwave/images/contents/av_nophoto_100_6.gif)
- 文字列の読み込みに関して
C言語で、fgetsを使って文字列ファイルから読み込みを行うと、改行もしくは指定した文字列が来ると読み込みを、止めますが途中で改行が来ても読み飛ばして。(丸)までを読み込むようにするには、どのようなコードを書けばいいのですか? 別に使う関数は、これ以外でもいいのでコードを教えてもらえますか? お願いします。
- ベストアンサー
- noname#4509
- C・C++・C#
- 回答数4
- explicitの定義は?
C++においてexplicitについて調べると explicit <エクスプリシット> 「明示的」 引数をひとつだけ受け取るコンストラクタに付けることのできる C++ 言語のキーワード。 クラスを関数の引数として使う場合、その関数には、クラスのコンストラクタの引数になっているものも渡すことができてしまう。これは暗黙的にコンストラクタが呼び出されるからである。このとき、「コンストラクタの引数」がまるで「関数の引数」であるかのように振る舞ってしまい、本来ならコンパイルエラーとなって欲しい場面でも、見えない部分でコンストラクタが呼ばれることでコンパイルが通ってしまう。その結果、想定していない動作をする可能性がある。 そこで、コンストラクタには「暗示的に呼び出せない」ようにするためのキーワードがある。それが explicit である。このキーワードを付けたコンストラクタは、必ず明示的に呼び出される必要があり、前述のようなことをしようとするとコンパイル時にエラーが発生する。 となっていました 「クラスを関数の引数として使う場合、その関数には、クラスのコンストラクタの引数になっているものも渡すことができてしまう。」 のところが分かりません 具体例で説明してください 例えば template<class CharType,class Attr=char_traits<CharType>, Class Allocator=allocator<T> >class basic_string クラスのコンストラクタが explicit basic_string(const Allocator &a=Allocator()); ですがこのケースについて説明していただければ幸いです
- explicitの定義は?
C++においてexplicitについて調べると explicit <エクスプリシット> 「明示的」 引数をひとつだけ受け取るコンストラクタに付けることのできる C++ 言語のキーワード。 クラスを関数の引数として使う場合、その関数には、クラスのコンストラクタの引数になっているものも渡すことができてしまう。これは暗黙的にコンストラクタが呼び出されるからである。このとき、「コンストラクタの引数」がまるで「関数の引数」であるかのように振る舞ってしまい、本来ならコンパイルエラーとなって欲しい場面でも、見えない部分でコンストラクタが呼ばれることでコンパイルが通ってしまう。その結果、想定していない動作をする可能性がある。 そこで、コンストラクタには「暗示的に呼び出せない」ようにするためのキーワードがある。それが explicit である。このキーワードを付けたコンストラクタは、必ず明示的に呼び出される必要があり、前述のようなことをしようとするとコンパイル時にエラーが発生する。 となっていました 「クラスを関数の引数として使う場合、その関数には、クラスのコンストラクタの引数になっているものも渡すことができてしまう。」 のところが分かりません 具体例で説明してください 例えば template<class CharType,class Attr=char_traits<CharType>, Class Allocator=allocator<T> >class basic_string クラスのコンストラクタが explicit basic_string(const Allocator &a=Allocator()); ですがこのケースについて説明していただければ幸いです
- free()への引数について
下位にて動的に確保した領域を解放するのは以下のように すればよいのでしょうか?また解放されているか確認する方法はあるのでしょうか? void main(){ char *p = 0x00; if (0 != exaMalloc(&p)) { printf("err\n"); exit(); } free(&p); } int exaMalloc(**p) { *p = malloc(10); if (*p == 0x00) { return -1; } return 0; }
- free()への引数について
下位にて動的に確保した領域を解放するのは以下のように すればよいのでしょうか?また解放されているか確認する方法はあるのでしょうか? void main(){ char *p = 0x00; if (0 != exaMalloc(&p)) { printf("err\n"); exit(); } free(&p); } int exaMalloc(**p) { *p = malloc(10); if (*p == 0x00) { return -1; } return 0; }
- fclose(fp);
FILE *fp; fp = fopen("xx.txt", "r"); if (fp) { ファイルが開けた時のxx.txtを使わない処理 fclose(fp); } else { ファイルが開けなかった時の処理 } これを下のように書き換えると動作が変わりますか? FILE *fp; fp = fopen("xx.txt", "r"); fclose(fp); if (fp) { ファイルが開けた時のxx.txtを使わない処理 } else { ファイルが開けなかった時の処理 } 書き換えた場合に動作が変わるかもしれないと思うのは、2つの心配事があるからです。 fclose();という関数が、fpの値を変化させることがあるのか心配。 それと、fclose(fp);によって、fpの指す値が保存されているメモリアドレスが開放されて、 それは他のスレットで使用可能なメモリアドレスということになって、他のスレッドによって fclose(fp);とif (fp)の間の時間に、fpの値が書き換えられてしまうかもしれないという心配。 この2つの心配は正しい心配ですか? 知識不足のために不要な心配をしているかもしれないと思って質問しました。
- 文字列の読み込みに関して
C言語で、fgetsを使って文字列ファイルから読み込みを行うと、改行もしくは指定した文字列が来ると読み込みを、止めますが途中で改行が来ても読み飛ばして。(丸)までを読み込むようにするには、どのようなコードを書けばいいのですか? 別に使う関数は、これ以外でもいいのでコードを教えてもらえますか? お願いします。
- ベストアンサー
- noname#4509
- C・C++・C#
- 回答数4
- 二分探索木を用いての探索
C言語でプログラミングしています。 二分探索木を用いて探索するプログラムなのですが 与えられた値の前後の値(与えられた値より大きく(小さく)てその値 に一番近いもの)を見つけたいのですが分かりません。 いろいろとネット等で調べてみると「挿入してその左右を見る」 となっているのですが…。 普通の二分探索木ではだめなのでしょうか? よろしくお願いします。
- 二分探索木を用いての探索
C言語でプログラミングしています。 二分探索木を用いて探索するプログラムなのですが 与えられた値の前後の値(与えられた値より大きく(小さく)てその値 に一番近いもの)を見つけたいのですが分かりません。 いろいろとネット等で調べてみると「挿入してその左右を見る」 となっているのですが…。 普通の二分探索木ではだめなのでしょうか? よろしくお願いします。
- 二分探索木を用いての探索
C言語でプログラミングしています。 二分探索木を用いて探索するプログラムなのですが 与えられた値の前後の値(与えられた値より大きく(小さく)てその値 に一番近いもの)を見つけたいのですが分かりません。 いろいろとネット等で調べてみると「挿入してその左右を見る」 となっているのですが…。 普通の二分探索木ではだめなのでしょうか? よろしくお願いします。
- 二分探索木を用いての探索
C言語でプログラミングしています。 二分探索木を用いて探索するプログラムなのですが 与えられた値の前後の値(与えられた値より大きく(小さく)てその値 に一番近いもの)を見つけたいのですが分かりません。 いろいろとネット等で調べてみると「挿入してその左右を見る」 となっているのですが…。 普通の二分探索木ではだめなのでしょうか? よろしくお願いします。
- 二分探索木を用いての探索
C言語でプログラミングしています。 二分探索木を用いて探索するプログラムなのですが 与えられた値の前後の値(与えられた値より大きく(小さく)てその値 に一番近いもの)を見つけたいのですが分かりません。 いろいろとネット等で調べてみると「挿入してその左右を見る」 となっているのですが…。 普通の二分探索木ではだめなのでしょうか? よろしくお願いします。
- 二分探索木を用いての探索
C言語でプログラミングしています。 二分探索木を用いて探索するプログラムなのですが 与えられた値の前後の値(与えられた値より大きく(小さく)てその値 に一番近いもの)を見つけたいのですが分かりません。 いろいろとネット等で調べてみると「挿入してその左右を見る」 となっているのですが…。 普通の二分探索木ではだめなのでしょうか? よろしくお願いします。
- 二分探索木を用いての探索
C言語でプログラミングしています。 二分探索木を用いて探索するプログラムなのですが 与えられた値の前後の値(与えられた値より大きく(小さく)てその値 に一番近いもの)を見つけたいのですが分かりません。 いろいろとネット等で調べてみると「挿入してその左右を見る」 となっているのですが…。 普通の二分探索木ではだめなのでしょうか? よろしくお願いします。
- 二分探索木を用いての探索
C言語でプログラミングしています。 二分探索木を用いて探索するプログラムなのですが 与えられた値の前後の値(与えられた値より大きく(小さく)てその値 に一番近いもの)を見つけたいのですが分かりません。 いろいろとネット等で調べてみると「挿入してその左右を見る」 となっているのですが…。 普通の二分探索木ではだめなのでしょうか? よろしくお願いします。
- 組み合わせ順列
nCrを求める関数combination(n,r)をC言語で作りたいのですが、どうすればよいか教えてください。また、参考となるようなサイトを教えてください。僕の作った関数だと、すぐに桁あふれになってしまいます。そのことを考慮して、桁あふれにになりにくい関数もつくりました。これは パスカルの三角形の関係を使ったnCr=n-1Cr +n-1Cr-1の関係を使っての再帰関数です。しかし、これだと結果を出すのに時間がかかってしまいます。僕がつくった関数をいくつか出しておきますのでいい考えがあれば教えてください。64C32が高速に正確に出れれば最高です。 long combination(int n,int r) { int i, a, b; long c; if(r>n/2) r=n-r; a= n; b= 1; c= 1L; for(i=0 ;i< r ;i++){ c= c* a/ b; a--; b++; } return c; } これはすぐに桁あふれになってしまう。 long combination(int n,int r) { int i, a, b; double c; if(r>n/2) r=n-r; a= n; b= 1; c= 1.0; for(i=0 ;i< r ;i++){ c= c/b*a; a--; b++; } return (long)c; } これはcをdoubleにして計算する分、丸めこみが生じ誤差がでる。 long combination(int n,int r) { long c; if(r> n-r) r=n-r; if(r==0) return 1; else if(r==1) return n; else{ c= combination(n-1,r-1)+ combination(n-1,r); return c; } } これは誤差は出ず正確であるがいかんせん遅い!
- 組み合わせ順列
nCrを求める関数combination(n,r)をC言語で作りたいのですが、どうすればよいか教えてください。また、参考となるようなサイトを教えてください。僕の作った関数だと、すぐに桁あふれになってしまいます。そのことを考慮して、桁あふれにになりにくい関数もつくりました。これは パスカルの三角形の関係を使ったnCr=n-1Cr +n-1Cr-1の関係を使っての再帰関数です。しかし、これだと結果を出すのに時間がかかってしまいます。僕がつくった関数をいくつか出しておきますのでいい考えがあれば教えてください。64C32が高速に正確に出れれば最高です。 long combination(int n,int r) { int i, a, b; long c; if(r>n/2) r=n-r; a= n; b= 1; c= 1L; for(i=0 ;i< r ;i++){ c= c* a/ b; a--; b++; } return c; } これはすぐに桁あふれになってしまう。 long combination(int n,int r) { int i, a, b; double c; if(r>n/2) r=n-r; a= n; b= 1; c= 1.0; for(i=0 ;i< r ;i++){ c= c/b*a; a--; b++; } return (long)c; } これはcをdoubleにして計算する分、丸めこみが生じ誤差がでる。 long combination(int n,int r) { long c; if(r> n-r) r=n-r; if(r==0) return 1; else if(r==1) return n; else{ c= combination(n-1,r-1)+ combination(n-1,r); return c; } } これは誤差は出ず正確であるがいかんせん遅い!
- 簡単なstringの使い方。
int main() { char answer[6]; cout <<"あなたは学生ですか?\n"; cin>> answer; //ユーザーはここでYESと入力 if(anser =="YES"){ cout<<"学生証を提出してください。\n"; } return 0; } このようなプログラミングでYESと入力しても "学生証を提出してください。”が出てきません。 もしこれを char answer にしてYとだけ入力するようにすると動きます。 なぜYESと入力するようにするとうまくいかないのか、 どなたかわかる方大至急よろしくお願いします!!
- ベストアンサー
- pinoko2003
- C・C++・C#
- 回答数2