質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

3回答

1771閲覧

C言語 構造体の問題

iheanachonpa

総合スコア11

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/05/19 07:35

###前提・実現したいこと
構造体で jap > math と入力すると、japがmathの点数より高い人の学籍番号を表示するプログラムを作成したい

###発生している問題・エラーメッセージ

###該当のソースコード

c++、C言語

#include<stdio.h>
struct record{ int jap,math,eng; };
struct record database[10];

struct query{
double p1,p2;
char op; };

struct query input_calc()
{
double p1,p2;
char op;
struct query p;
scanf("%f %c %f",&p1, &op, &p2);

return p;

}

double exec_query(struct query x)
{
swhich(x.op)
{
case'>':
case'<':
case'=':
default:
}
}

int main()
{
int i=0;
struct record[10]=
{{58,46,87},
{55,84,56},
{96,94,74},
{28,80,90},
{57,57,31},
{65,84,73},
{60,59,67},
{47,79,75},
{75,85,57},
{60,98,61}};

struct query cal; double ans; while(1) { cal = input_calc(); ans = exec_query(cal); printf("%f\n",ans); }

}
###試したこと
C言語が苦手なので助けてほしいです
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
###前提・実現したいこと
コメントもいただけるとうれしいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2016/06/25 04:09

解決したならベストアンサーを決めてください。解決してないなら追記してください。
guest

回答3

0

ナニがわからんのか明記されてないので答えようがなく、勝手にC++で実装してみた。

C++

1#include <iostream> 2#include <string> 3 4using namespace std; 5 6const static int N = 10; 7struct record { 8 int id; // 学籍番号(勝手に追加) 9 int jap; 10 int math; 11 int eng; 12}; 13 14record database[N] = { 15 {100, 58,46,87}, 16 {101, 55,84,56}, 17 {102, 96,94,74}, 18 {103, 28,80,90}, 19 {104, 57,57,31}, 20 {105, 65,84,73}, 21 {106, 60,59,67}, 22 {107, 47,79,75}, 23 {108, 75,85,57}, 24 {109, 60,98,61} 25}; 26 27struct query { 28 string lsubj; 29 string op; 30 string rsubj; 31}; 32 33query input_query() { 34 query result; 35 cin >> result.lsubj >> result.op >> result.rsubj; 36 return result; 37} 38 39void exec_query(query x) { 40 for ( int i = 0; i < N; ++i ) { 41 record rec = database[i]; 42 int lhs; 43 int rhs; 44 bool match = false; 45 if ( x.lsubj == "jap" ) lhs = rec.jap; 46 else if ( x.lsubj == "eng" ) lhs = rec.eng; 47 else if ( x.lsubj == "math" ) lhs = rec.math; 48 else continue; 49 if ( x.rsubj == "jap" ) rhs = rec.jap; 50 else if ( x.rsubj == "eng" ) rhs = rec.eng; 51 else if ( x.rsubj == "math" ) rhs = rec.math; 52 else continue; 53 if ( x.op == ">" ) match = lhs > rhs; 54 else if ( x.op == "<" ) match = lhs < rhs; 55 else if ( x.op == "=" ) match = lhs == rhs; 56 else continue; 57 if ( match ) { 58 cout << '#' << rec.id 59 << ": jap=" << rec.jap << " " 60 << ": eng=" << rec.eng << " " 61 << ": math=" << rec.math << " " 62 << endl; 63 } 64 } 65} 66 67int main() { 68 while(1) { 69 exec_query(input_query()); 70 } 71}

投稿2016/05/20 00:11

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

日本語、数学、英語の順で点数が来るのは理解しました。コンパイル時決まっているのだからmainの外で宣言しても良いと思いました。While(1)で無限ループさせるのでしょうか、int iと定義してるのに宣言されていません。難解です。
構造体の終わりがrecord[333]={-1,-1,-1}とか、生徒数maxを100人とするなら100回構造体を検査させましょうか。
あ、構造体を外側で宣言してるのですね。それと、「loop_counter_i」より「i」の方が楽ですが、他人に見せる場合やデバッグ時に苦労しますし、以前「i」をグローバル宣言しており、iループの中でCALL(Cでは関数名)してるサブルーチンの中でiを使ってしまって終わらなかった事があります。
それ依頼、関数、変数名は長くしましたし、「a」や「i」と言った短い変数も使いません。ましてや「recode」なる勘違いされやすい名前は使わなくなりました。

投稿2016/05/19 09:45

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

構造体で jap > math と入力すると

とか、ちょっと日本語として通じない部分があるんですが、類推してお答えします。

学籍番号を表示する

とありますけど、学籍番号はどこに格納されているんでしょうか?

main関数の中で、

c

1struct record[10]=

とありますが、recordは構造体の名前なので、変数名が必要です。

query input_calc() 関数でscanfを使って入力してますが、入力した結果をpのメンバー変数にセットしないと、入力値が呼び出し元に返ってきませんよ。

exec_query() 関数が入力した内容に従って学籍番号を返す関数だと思いますが、学籍番号はdouble型なのでしょうか?

今一度、課題文をよく読み返したほうがいいと思います。この前も、読み違えて勘違いしていた人がいましたから。

投稿2016/05/19 08:27

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問