VC++でいろいろ真似しながら作ってみる。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
テマリ

VC++でいろいろ真似しながら作ってみる。

#1

投稿記事 by テマリ » 11年前

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++でいろいろ真似しながら作ってみる。

#2

投稿記事 by テマリ » 11年前

コード:

// 択一問題.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)
ホワイル文の条件がわからないです。

コード:

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の数字を入力してたもう");
これはcase 3 :だけわからないです。

テマリ

Re: VC++でいろいろ真似しながら作ってみる。

#3

投稿記事 by テマリ » 11年前

コード:

#define MBF 1024
が抜けていたのを修正しました。
いくつか抜けている物を修正しました。

コード:

// 択一問題.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++でいろいろ真似しながら作ってみる。

#4

投稿記事 by テマリ » 11年前

デバッグなしで開始だと閉じませんでした
下記のように表示されたのですが何がなんなのかまったくわからないです。

三択問題を始めます。
問題:/*_出力:
問題: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++でいろいろ真似しながら作ってみる。

#5

投稿記事 by テマリ » 11年前

コード:

#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;
}
こんな感じので上と同じで作るとコードが長くなるから問題は別のファイルに入れといてみたいな感じだと思うんですがうまくいきません。

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: VC++でいろいろ真似しながら作ってみる。

#6

投稿記事 by beatle » 11年前

連投がたくさんあって訳がわからないので、現在質問したいことを整理して書いてくれませんか?

テマリ

Re: VC++でいろいろ真似しながら作ってみる。

#7

投稿記事 by テマリ » 11年前

連投すみません。

コード:

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;
}
このコードを箇条書きで説明してもらえませんか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: VC++でいろいろ真似しながら作ってみる。

#8

投稿記事 by softya(ソフト屋) » 11年前

大半は、
1.動きが変わるように書き換えてみる
2.デバッガで追いかけてみる
3.printtfで変数を表示してみる。
で理解できそうです。
これらの事はやってみましたか?

【補足】
あとコンパイルは通る形で投稿してください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

non
記事: 1097
登録日時: 13年前

Re: VC++でいろいろ真似しながら作ってみる。

#9

投稿記事 by non » 11年前

nln++;の場所が悪いというか・・・defaultが悪いというか・・・・

間違っているプログラムを説明しろといわれても、あなたが変更したプログラムなんでしょ。
自分でわからないところを質問したらどうですか?
non

テマリ

Re: VC++でいろいろ真似しながら作ってみる。

#10

投稿記事 by テマリ » 11年前

すみません甘えてました。
リファレンス見たり変更したりしたらほとんどわかりました。
ここでわからない事をただ書き込めば速く楽に解決できるだろうと思って書き込んでいました。
他人をあてにして書き込んでいました。
これからは一人で出来ることは一人でやります。
迷惑かけてすみませんでした。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: VC++でいろいろ真似しながら作ってみる。

#11

投稿記事 by softya(ソフト屋) » 11年前

テマリ さんが書きました:すみません甘えてました。
リファレンス見たり変更したりしたらほとんどわかりました。
ここでわからない事をただ書き込めば速く楽に解決できるだろうと思って書き込んでいました。
他人をあてにして書き込んでいました。
これからは一人で出来ることは一人でやります。
迷惑かけてすみませんでした。
迷惑というか他人に書いてもらっても理解には程遠く自分で考えて試すのが一番理解につながるのです。
ただ、どうやってもわからない自分の限界を超えたものは聞いてください。

【補足】
と思っているので、こういうリクエストに直接お答えすることはないと思います。
解決への道筋は出来るだけお答えします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る