C言語なら俺に聞け( ..
[2ch|▼Menu]
697:デフォルトの名無しさん
08/04/24 08:08:30
>>680
いえ、fclose() されるわけではないので、大丈夫です。

698:デフォルトの名無しさん
08/04/24 08:28:26
>>697
行の途中では^zや^dは利かないんじゃないか?
逆に、利いたとしたらストリームが閉じられているわけだから
二度と入力できなくなるぞ。

699:デフォルトの名無しさん
08/04/24 09:19:29
URLリンク(www.bohyoh.com)
> 改行文字を読み取ったとき、またはファイルの終わりを検出したときに、
> 文字の読取りは終了し、
改行コードまで取り込む性質があるわけだから、入力>改行で終わらせたら
当然改行コードは含まれてしまう。そこで、それを排除して取り込めばおk。
まぁ、やはり手段としてはEOFを入力するのもありだが、別のライブラリを用いては?

700:デフォルトの名無しさん
08/04/24 09:24:27
そこで、gets関数

701:デフォルトの名無しさん
08/04/24 09:43:19
っツーか、面倒くせぇ〜からmainへの引数として、実行する際にパラメーターに
ファイル名を渡して処理しチャイナと。

702:デフォルトの名無しさん
08/04/24 13:32:34
>>686
わざわざ質問してくださってありがとうございます。
スレリンク(tech板:139番)
の後半で述べられてることについて、こちらでも確認しました。

片方のみ初期化すると、その初期値で定義され、両方初期化すると
$ gcc src?.c
/tmp/cc4a7Yre.o:(.data+0x0): multiple definition of `a'
/tmp/ccwrP69I.o:(.bss+0x0): first defined here
collect2: ld はステータス 1 で終了しました
と望むエラーメッセージが表示されました。

ちなみにわたしはグローバル変数について勘違いしていたようです。
グローバル変数の宣言は、0での初期化が同時に行われると思っていたのですが、
実際は実行時に0で初期化される.bss領域ということを失念しておりました。

一応nmでシンボルのフラグをチェックしてみたところ、>>637は.bss領域にあり、
片方だけ明示的に初期化してもう片方にexternを使用すると.data領域に確保されることを確認しました。


グローバル変数は普通、明示的に初期化して使うものなんでしょうね。
グローバル変数を使う機会が多くないもので知りませんでした。

ありがとうございました。

703:デフォルトの名無しさん
08/04/24 17:25:19
CreateProcessで起動したプログラムをSendMessageで終了させるにはどうしたらいい?
検索してたらこんなん見つけたんだけど

引用元:URLリンク(homepage2.nifty.com)
BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam)
{
DWORD dwThreadId, dwProcessId;

dwThreadId = GetWindowThreadProcessId(hwnd, &dwProcessId);
if (dwProcessId == (DWORD)lParam) {
PostMessage(hwnd, WM_CLOSE, 0, 0);
}

return TRUE;
}
// pi は CreateProcess() したときの PROCESS_INFORMATION
EnumWindows(EnumProc, (LPARAM)pi.dwProcessId);

この使い方解説誰かお願い

CreateProcess
→FindWindow
→SendMessage

これだとFindWindowがおかしくてできなかった

704:デフォルトの名無しさん
08/04/24 17:40:45
FindWindowが駄目なら
FindWindowExを使えば良いじゃない。

705:デフォルトの名無しさん
08/04/24 17:44:48
Exは子ウィンドウのときだろ。

「FindWindowがおかしい」
キャプションかクラス名の指定がウンコなんじゃねーの。

706:デフォルトの名無しさん
08/04/24 18:00:48
>>703
使い方解説もなにも、
そのEnumProc関数をどこかに作っておいて

>EnumWindows(EnumProc, (LPARAM)pi.dwProcessId); 

を実行するだけじゃない?

707:703
08/04/24 18:08:43
CreateProcess(NULL, "sample.exe", NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
hWnd = FindWindow("sample", NULL);

sample.exeはSleep(1000)で無限ループさせてる

hWndが0になってしまうorz

708:デフォルトの名無しさん
08/04/24 18:21:16
>>707
プロセスを作ってすぐにFindWindowしても、sample.exeの方はまだCreateWindowを呼ぶ前かもしれないし
WaitForInputIdleとか試してみたらどう

709:デフォルトの名無しさん
08/04/24 18:24:41
sleepで無限ループさせてるなら、なぁ。

sample.exeのキャプションに"sample"が無いんじゃねーの。
Spy++でも使って調べてクラス名でやってみれ。

710:デフォルトの名無しさん
08/04/24 18:26:59
いつまでスレチにかまってんだよ

711:デフォルトの名無しさん
08/04/24 18:41:57
>>681

 int *A;
 scanf("%d", A[0]); // この時点ば終わっている

貴方はポインターの使い方を全く理解していない。

 int iValueBody[256];
 int* A = iValueBody;

A の実体が無いのに、そこに値を放り込むなんてダメだよ。
なのでそれ以降はナンセンス。

712:デフォルトの名無しさん
08/04/24 18:55:13
nに値が入ってないのにループ回してるほうが先だろw

713:デフォルトの名無しさん
08/04/24 19:09:51
>>706,>>709
ありがとう、後でやってみる

>>708
sampleはコンソールアプリなんだ

714:デフォルトの名無しさん
08/04/24 19:28:00
>>713
Win32API質問箱 Build65
スレリンク(tech板)

715:デフォルトの名無しさん
08/04/24 19:36:39
>>714
そっち行ってみます

716:デフォルトの名無しさん
08/04/24 19:51:36
>>712
むむむ。彼の書き込みをみると、n には程よい値が入っていてくれて A はどこかちゃんとしたメモリー空間を示していてくれる・・という、とてつもない期待をしてるんだろうなぁ。(遠い目)
人工知能の C++MiKu とかだったら、希望通りにしてくれるのかもしれない(今は無くとも将来はまんざらでないかも)

717:デフォルトの名無しさん
08/04/24 19:59:59
少なくともソートとかに手を出すレベルじゃないのは確かだな

718:デフォルトの名無しさん
08/04/24 20:50:32
>>716同感です。

引数の渡し方がわからなくてあれだけ書いてるんだから
なんかサンプルみながらやってるんじゃない?

719:デフォルトの名無しさん
08/04/24 21:58:27
自分で入力したデータの件数分の平均身長、平均体重を出したいです。
(人数は一番最初に入力)

この場合、変数は、int型のweight height の他何が必要でしょうか?

720:デフォルトの名無しさん
08/04/24 21:59:46
10人に聞けば10通りの答えが返ってくる。
プログラムの書き方次第でどうにでもなるから答えようがない。

721:デフォルトの名無しさん
08/04/24 22:01:41
>>719
がんばればint型一個でできるよ

722:デフォルトの名無しさん
08/04/24 22:06:10
人数受け取ってmalloc

723:デフォルトの名無しさん
08/04/24 22:06:54
C言語におけるリテラル文字列の取り扱いですが、
置かれるメモリプールとかライフタイムとか
どうであるのが正しいんでしょうか?

例えば以下のコードはありですか?

const char * func()
{
return "AAA";
}


724:デフォルトの名無しさん
08/04/24 22:08:07
リテラル文字列は静的な領域に置かれる。

725:デフォルトの名無しさん
08/04/24 22:08:28
>>723
普通にありです。

726:デフォルトの名無しさん
08/04/24 22:25:05
>>724-725
回答ありがとうございました。
実装依存とかだと困るなーと思ってたんですが
そうじゃないんですね。

727:デフォルトの名無しさん
08/04/24 22:59:24
ファイルパス文字列(という言い方をしますが)の左右のダブルクォーテーションを削りたいです
ファイルパスの途中にスペース(C:\Program Filesみたいな)があるとダブルクォーテーションで
括られると思うのですが、これを削る方法はあるのでしょうか?



728:側近中の側近 ◆0351148456
08/04/24 23:05:22
>>727
(っ´▽`)っ こういう感じ。
void deleteDoubleQuotation(
  char *c1,
  char *c2
){
  if(c1[0] = '"'){
    strcpy(c2, &c1[1]);
  }
  else{
    strcpy(c2, c1);
  }
  if(c2[strlen(c2) - 1] = '"'){
    c2[strlen(c2) - 1] = '\0';
  }
  return;
}

729:719
08/04/24 23:09:08
質問変えます。
件数分の身長、体重を集計・・・するんですが、
どういう計算処理をすればいいんでしょうか?

730:デフォルトの名無しさん
08/04/24 23:12:11
合計して人数で割る

731:デフォルトの名無しさん
08/04/24 23:15:54
>>728
VB厨の私ですが感動しました
探して早速明日組んでみます(゚▽゚)

732:デフォルトの名無しさん
08/04/24 23:15:58
>>729 つか, 算術的にはどういう計算をするかを考えないのか?


733:デフォルトの名無しさん
08/04/24 23:20:08
もしダブルクォーテーションならスキップ

734:デフォルトの名無しさん
08/04/24 23:30:11
>>729
そういうのを考える事が初めの段階だと思うけど・・
アルゴリズムの本でも買ったらどうだろう
>>730のとおり算数と同じ処理をしてあげればいい


735:デフォルトの名無しさん
08/04/24 23:33:49
単純に考えた場合
[入力用]
int型 人数、1人の身長、1人の体重
[ほか]
int型 身長の合計、体重の合計、ループ用変数

こんなもん

736:デフォルトの名無しさん
08/04/24 23:39:02
〜略〜

ループ{
 身長体重入力
 ついでに人数カウント


合計・平均計算

〜略〜


737:デフォルトの名無しさん
08/04/24 23:46:08
>>713
そのEnumWindows()を使う手法はもちろんウィンドウを持つプロセスに対
してしか使えない。
コンソールアプリだとふつうはメッセージを受けとらないから、
TerminateProcess() するしかないんじゃないかな。


738:デフォルトの名無しさん
08/04/24 23:53:50
>>728
家にある環境でやってみたらできました(゚▽゚)

if(c2[strlen(c2) - 1] = '"')
c2[strlen(c2) - 1] = '\0';

if(c2[strlen(c2) - 2] = '"')
c2[strlen(c2) - 2] = '\0';

改行コード?分があるようだったので-2にしてみたら綺麗に取れました
ありがとうございますー

739:737
08/04/24 23:55:49
>>737
他のスレで話が進んでいた。とても虚しい気分になった…


740:デフォルトの名無しさん
08/04/25 00:26:19
〜略〜
int 人数、1人の身長、1人の体重
int 身長の合計、体重の合計、ループ用変数

人数 = 入力()

ループ {
 1人の身長 = 入力()
 1人の体重 = 入力()
 身長の合計 += 1人の身長
 体重の合計 += 1人の体重
} (ループ用変数が人数になるまで)

結局平均が欲しいのかよくしらないけど、とにかく集計の計算
〜略〜

まとめてみた。できそうじゃないか!

741:デフォルトの名無しさん
08/04/25 00:51:03
char *c, data[200];
c = fgets(data, 200, stdin);
if(c != NULL && data[0] != '\n')

というのを、
char data[200];
if((fgets(data, 200, stdin) != NULL) && data[0] != '\n')
と書いても大丈夫でしょうか。

742:デフォルトの名無しさん
08/04/25 00:53:37
>>741 おk

743:デフォルトの名無しさん
08/04/25 00:55:19
大丈夫なのと書いた方がいいのとの間には
大きな壁があるけどな

744:TT
08/04/25 01:37:26
「Continue文」を使った宿題が出ました
内容が「60点以上を合格とし、合格者の平均点を出力する」です
誰かソースを教えて下さいm(_ _)m

745:デフォルトの名無しさん
08/04/25 01:39:31
>>744
宿題スレへどうぞ。
いや、どちらかと言えば半年ROMってから出直すことをお勧めしますが。

746:デフォルトの名無しさん
08/04/25 01:40:48
>>744
ソースを教えろといわれても、個人の成績のデータの入力仕様がわからないから教えられないだろ。

747:TT
08/04/25 02:03:32
「個人の成績のデータの入力仕様」は適当な数値で・・・

748:デフォルトの名無しさん
08/04/25 02:04:54
宿題スレ行け


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5386日前に更新/199 KB
担当:undef