C言語関係掲示板

過去ログ

No.25. VC++でのCTRL+Zの入力(2)


こんにちわ。いつも参考に読ませてもらっています.
どうしてもわからないので、お聞きしたいのですが、
ここのホームページの構造体のところの演習を、
自分で一度作ってみたのですが、
どうしても、最初に入力したものは出力されず、
2回目以降に入力したものだけが出力されてしまいます。
ちなみに、ホームページに書かれていた演習のプログラムを
実行したら、(1つ目から)すべて出力されます.
#include <stdio.h>

#define NINZU 50
struct kakuji {
char name[20]; /* 名前 */
double weight; /* 身長 */
double height; /* 体重 */
};

void syuturyoku(struct kakuji *hito_p); /* データ出力 */

int main(void)
{
struct kakuji hito[NINZU+1];
int i;

i=0;
while( (scanf("%s %lf %lf", hito[i].name, &hito[i].weight, &hito[i].height)!=EOF) && i<NINZU) { /* それぞれの入力 */
i++;
}

hito[i].weight= -1; /* ストッパー */
syuturyoku(hito);

return 0;
}

void syuturyoku(struct kakuji *hito_p) /* 画面出力 */
{
while(hito_p->weight!=-1) {
printf("%-10s %3f %4f\n",hito_p->name, hito_p->weight, hito_p->height);
hito_p++;
}
}


スタンダードなC言語では問題ないと思います。

こんにちは、coffeeさん。確かcoffeeさんの環境はVisualC++(6.0)でしたよね。
これも環境の問題で上手くいかないのだと思います。
生憎、私はVC++を持っていないのですが、coffeeさんのプログラムをLSIC
とTurbo-C++で実行してみましたが、問題はありませんでした。
けれども、BCBではcoffeeさんのご指摘のようになりました。
そういえば、先日のご質問もCTRL+Zを入力させようとして起こった問題でしたよね。

考えてみれば、Windowsの環境で「CTRL+Z」は「Undo」のショートカットキーですから、
何か特殊な処理をしてしまうのかもしれません。


理由はわかりませんが、
hito[i].weight= -1; /* ストッパー */の後か
関数内のwhile(hito_p->weight!=-1) {の前で
puts("");などで一度出力すれば問題は解消されます。


やっぱり、「Undo」?

確かにputs("");を入れると、ちゃんと表示しますね。それならばということで、
fflush(stdout);でバッファを吐き出させたんですが、駄目でした。
そこで、puts("a"); にしてみると、今度は"a"を出力しないんですね。
ということは、いったんは出力するけれど、「Undo」が働いて取り消されてしまう
と言うことでしょうか。


ともじさん、shuさんありがとうございます。私も、puts("a")を使ってみたらうまく出力されました.たぶん、CTRL+Zが、Undo(初めて聞きました)のショートカットで、その影響で出力が取り消されているのかもしれないんですね。調べられるのかどうかわかりませんが、いちおUndoの動作を調べてみようと思います.本当にありがとうございました.

戻る


「初心者のためのポイント学習C言語」 Last modified:2001.7.25
Copyright(c) 2000-2002 TOMOJI All Rights Reserved