ページ 1 / 1
VC++でいろいろ真似しながら作ってみる。
Posted: 2012年11月10日(土) 06:52
by テマリ
http://detail.chiebukuro.yahoo.co.jp/qa ... 1022474235
上記URLのページのコードを真似して作ってみたんですが
コード:
// 択一問題.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *fnm="test.txt";
FILE *fp; //問題のファイル
int nhit; //正解数
int nqst; //出題数
char bff[MBF]; //入力バッファ
int nln; //入力行数
int nans; //正解番号入力
int kans; //正解番号
char yn[4]; //yes/no入力バッファ
if((fp=fopen(fnm,"r"))=NULL){
printf("ファイル%sのオーブンに失敗\n",fnm);
return 1;
}
nhit = nqst = nln = 0
printf("三択問題を始めます。\n");
while(fgets(bff,MBF,fp)!=NULL){
switch(nln%3+1){
case 1:
printf("問題:%s",bff);
break;
case 2:
printf("%s",bff);
printf("何番目が正解ですか?>");
scanf("%d",&nans);
break;
case 3:
nqst++;
kans = atoi(strtok(bff", \n"));
printf"@kans=%d,nans=%d\n",kans,nans);
if(nans==kans){
printf("正解です。\n");
nhit++;
}else{
printf("はずれです。\n",nhit,nqst);
scanf("%s",yn);
}
nln++;
if(*yn=='n')break;
}
return 0;
}
1>------ ビルド開始: プロジェクト: 択一問題, 構成: Debug Win32 ------
1>コンパイルしています...
1>択一問題.cpp
1>c:\users\yusuke\documents\visual studio 2008\projects\択一問題\択一問題\択一問題.cpp(15) : error C2065: 'MBF' : 定義されていない識別子です。
1>c:\users\yusuke\documents\visual studio 2008\projects\択一問題\択一問題\択一問題.cpp(26) : error C2146: 構文エラー : ';' が、識別子 'printf' の前に必要です。
1>c:\users\yusuke\documents\visual studio 2008\projects\択一問題\択一問題\択一問題.cpp(27) : error C2065: 'MBF' : 定義されていない識別子です。
1>c:\users\yusuke\documents\visual studio 2008\projects\択一問題\択一問題\択一問題.cpp(27) : fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
1>ビルドログは "file://c:\Users\yusuke\Documents\Visual Studio 2008\Projects\択一問題\択一問題\Debug\BuildLog.htm" に保存されました。
1>択一問題 - エラー 4、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
という風になってしまったんですがどうすれば解決しますか。
test.txtは作ってあります。
Re: VC++でいろいろ真似しながら作ってみる。
Posted: 2012年11月10日(土) 07:29
by テマリ
コード:
// 択一問題.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *fnm="test.txt";
FILE *fp; //問題のファイル
int nhit; //正解数
int nqst; //出題数
char bff[MBF]; //入力バッファ
int nln; //入力行数
int nans; //正解番号入力
int kans; //正解番号
char yn[4]; //yes/no入力バッファ
if((fp=fopen(fnm,"r")) == NULL){
printf("ファイル%sのオーブンに失敗\n",fnm);
return 1;
}
nhit = nqst = nln = 0
printf("三択問題を始めます。\n");
while(fgets(bff,MBF,fp)!=NULL){
switch(nln%3+1){
case 1:
printf("問題:%s",bff);
break;
case 2:
printf("%s",bff);
printf("何番目が正解ですか?>");
scanf("%d",&nans);
break;
case 3:
nqst++;
kans = atoi(strtok(bff", \n"));
printf"@kans=%d,nans=%d\n",kans,nans);
if(nans==kans){
printf("正解です。\n");
nhit++;
}else{
printf("はずれです。\n",nhit,nqst);
scanf("%s",yn);
}
nln++;
if(*yn=='n')break;
default:
printf("1~3の数字を入力してたもう");
}
return 0;
}
1~3以外の入力の時のdefaultを追加しました。
NULLの前の=が一つだけだったので2つにしました。
charは変数で bff[]が変数名でMBFってなんなのでしょう。
コード:
if((fp=fopen(fnm,"r"))=NULL){
printf("ファイル%sのオーブンに失敗\n",fnm);
return 1;
}
これは
コード:
char *fnm="test.txt";
でエラーがあったら表示させるやつでしょうか?
コード:
nhit = nqst = nln = 0
これは変数の初期化で数字を入れる時は初期化しないといけないであってますか?
コード:
printf("三択問題を始めます。\n");
これは条件も何もないので表示されて終わり。
コード:
while(fgets(bff,MBF,fp)!=NULL)
ホワイル文の条件がわからないです。
スウィッチさんの条件もわからないです。
コード:
case 1:
printf("問題:%s",bff);
break;
case 2:
printf("%s",bff);
printf("何番目が正解ですか?>");
scanf("%d",&nans);
break;
case 3:
nqst++;
kans = atoi(strtok(bff", \n"));
printf"@kans=%d,nans=%d\n",kans,nans);
if(nans==kans){
printf("正解です。\n");
nhit++;
}else{
printf("はずれです。\n",nhit,nqst);
scanf("%s",yn);
}
nln++;
if(*yn=='n')break;
default:
printf("1~3の数字を入力してたもう");
これはcase 3 :だけわからないです。
Re: VC++でいろいろ真似しながら作ってみる。
Posted: 2012年11月10日(土) 07:48
by テマリ
が抜けていたのを修正しました。
いくつか抜けている物を修正しました。
コード:
// 択一問題.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MBF 1024
int main(){
char *fnm="test.txt";
FILE *fp; //問題のファイル
int nhit; //正解数
int nqst; //出題数
char bff[MBF]; //入力バッファ
int nln; //入力行数
int nans; //正解番号入力
int kans; //正解番号
char yn[4]; //yes/no入力バッファ
if((fp=fopen(fnm,"r"))==NULL){
printf("ファイル%sのオーブンに失敗\n",fnm);
return 1;
}
nhit = nqst = nln = 0;
printf("三択問題を始めます。\n");
while(fgets(bff,MBF,fp)!=NULL){
switch(nln%3+1){
case 1:
printf("問題:%s",bff);
break;
case 2:
printf("%s",bff);
printf("何番目が正解ですか?>");
scanf("%d",&nans);
break;
case 3:
nqst++;
kans = atoi(strtok(bff, " \n"));
printf("@kans=%d,nans=%d\n",kans,nans);
if(nans==kans){
printf("正解です。\n");
nhit++;
}else{
printf("はずれです。\n",nhit,nqst);
scanf("%s",yn);
}
nln++;
if(*yn=='n')break;
default:
printf("1~3の数字を入力してたもう");
}
}
return 0;
}
疑問はたくさんありますがビルドはできました。
ビルドしてすぐに閉じてしまいます。
閉じないようにするにはどうすればいいですか?
Re: VC++でいろいろ真似しながら作ってみる。
Posted: 2012年11月10日(土) 07:52
by テマリ
デバッグなしで開始だと閉じませんでした
下記のように表示されたのですが何がなんなのかまったくわからないです。
三択問題を始めます。
問題:/*_出力:
問題:3択問題を始めます。
問題:問題:日本の首相は誰ですか?
問題:小泉純一郎__麻生太郎__福田康夫
問題:何番目が正解ですか?>1
問題:@kans=2,nans=1
問題:はずれです。
問題:正解率は0/1です
問題:現在1問目です、続けますか?(y/n)>y
問題:問題:韓国の首都はどこですか?
問題:ソウル__ペイチン__ピョンヤン
問題:何番目が正解ですか?>3
問題:@kans=1,nans=3
問題:はずれです。
問題:正解率は0/2です
問題:現在2問目です、続けますか?(y/n)>y
問題:問題:日本人が1番好きな魚は何ですか?
問題:いわし__さば__まぐろ
問題:何番目が正解ですか?>3
問題:@kans=3,nans=3
問題:正解です。
問題:正解率は1/3です
問題:現在3問目です、続けますか?(y/n)>y
問題:問題:東京の中で地価が1番高いのはどこ?
問題:新宿__池袋__銀座
問題:何番目が正解ですか?>3
問題:@kans=3,nans=3
問題:正解です。
問題:正解率は2/4です
問題:現在4問目です、続けますか?(y/n)>n
問題:おわります
問題:*/
問題:/*_test.txt:
問題:日本の首相は誰ですか?
問題:小泉純一郎__麻生太郎__福田康夫
問題:2
問題:韓国の首都はどこですか?
問題:ソウル__ペイチン__ピョンヤン
問題:1
問題:日本人が1番好きな魚は何ですか?
問題:いわし__さば__まぐろ
問題:3
問題:東京の中で地価が1番高いのはどこ?
問題:新宿__池袋__銀座
問題:3
問題:数学の学力が1番高いのは?
問題:日本__香港__韓国
問題:2
問題:*/続行するには何かキーを押してください . . .
Re: VC++でいろいろ真似しながら作ってみる。
Posted: 2012年11月10日(土) 08:11
by テマリ
コード:
#include "stdafx.h"
#include <stdio.h>
int main(){
int var;
printf("伝説のポケモンの数を答えよ。\n");
printf("3体 = [1]\t5体 = [2]\t8体以上 = [3]\n");
scanf("%d",&var);
switch(var){
case 1 :
printf("少なすぎ・・・");
break;
case 2 :
printf("もっとだ!");
break;
case 3 :
printf("正解です。");
break;
default:
printf("指定した数を入れなさい");
}
return 0;
}
こんな感じので上と同じで作るとコードが長くなるから問題は別のファイルに入れといてみたいな感じだと思うんですがうまくいきません。
Re: VC++でいろいろ真似しながら作ってみる。
Posted: 2012年11月10日(土) 09:12
by beatle
連投がたくさんあって訳がわからないので、現在質問したいことを整理して書いてくれませんか?
Re: VC++でいろいろ真似しながら作ってみる。
Posted: 2012年11月10日(土) 10:24
by テマリ
連投すみません。
コード:
int main(){
char *fnm="test.txt";
FILE *fp; //問題のファイル
int nhit; //正解数
int nqst; //出題数
char bff[MBF]; //入力バッファ
int nln; //入力行数
int nans; //正解番号入力
int kans; //正解番号
char yn[4]; //yes/no入力バッファ
if((fp=fopen(fnm,"r"))==NULL){
printf("ファイル%sのオーブンに失敗\n",fnm);
return 1;
}
nhit = nqst = nln = 0;
printf("三択問題を始めます。\n");
while(fgets(bff,MBF,fp)!=NULL){
switch(nln%3+1){
case 1:
printf("問題:%s",bff);
break;
case 2:
printf("%s",bff);
printf("何番目が正解ですか?>");
scanf("%d",&nans);
break;
case 3:
nqst++;
kans = atoi(strtok(bff, " \n"));
printf("@kans=%d,nans=%d\n",kans,nans);
if(nans==kans){
printf("正解です。\n");
nhit++;
}else{
printf("はずれです。\n",nhit,nqst);
scanf("%s",yn);
}
nln++;
if(*yn=='n')break;
default:
printf("1~3の数字を入力してたもう");
}
}
return 0;
}
このコードを箇条書きで説明してもらえませんか?
Re: VC++でいろいろ真似しながら作ってみる。
Posted: 2012年11月10日(土) 10:34
by softya(ソフト屋)
大半は、
1.動きが変わるように書き換えてみる
2.デバッガで追いかけてみる
3.printtfで変数を表示してみる。
で理解できそうです。
これらの事はやってみましたか?
【補足】
あとコンパイルは通る形で投稿してください。
Re: VC++でいろいろ真似しながら作ってみる。
Posted: 2012年11月10日(土) 12:07
by non
nln++;の場所が悪いというか・・・defaultが悪いというか・・・・
間違っているプログラムを説明しろといわれても、あなたが変更したプログラムなんでしょ。
自分でわからないところを質問したらどうですか?
Re: VC++でいろいろ真似しながら作ってみる。
Posted: 2012年11月10日(土) 18:16
by テマリ
すみません甘えてました。
リファレンス見たり変更したりしたらほとんどわかりました。
ここでわからない事をただ書き込めば速く楽に解決できるだろうと思って書き込んでいました。
他人をあてにして書き込んでいました。
これからは一人で出来ることは一人でやります。
迷惑かけてすみませんでした。
Re: VC++でいろいろ真似しながら作ってみる。
Posted: 2012年11月10日(土) 18:20
by softya(ソフト屋)
テマリ さんが書きました:すみません甘えてました。
リファレンス見たり変更したりしたらほとんどわかりました。
ここでわからない事をただ書き込めば速く楽に解決できるだろうと思って書き込んでいました。
他人をあてにして書き込んでいました。
これからは一人で出来ることは一人でやります。
迷惑かけてすみませんでした。
迷惑というか他人に書いてもらっても理解には程遠く自分で考えて試すのが一番理解につながるのです。
ただ、どうやってもわからない自分の限界を超えたものは聞いてください。
【補足】
と思っているので、こういうリクエストに直接お答えすることはないと思います。
解決への道筋は出来るだけお答えします。