-1

私は、コンピュータサイエンスの学生のコレクションのデータベースを維持する簡単な登録システムを作成しています。各学生の記録には

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student
{

   char name[300];   
   int age;
   char course_1[40];
   char course_2[40];
   char *remarks;

};

struct course

{

   char course_title[200];
   int  cse_num[100];
   char instructor[200];
   char date[50];
   char start_time[50];
   char end_time[50];
   char location[50];

};


main()

{

  int i;
  struct course data[11];
  FILE *f;
  char title[100];
  int num[100];
  char instructor[100];
  char date[100];
  char start_time[100];
  char end_time[100];
  char location[100];
  char line[300];

  f = fopen("course.dat", "r");


  i=0;


  while(*fgets(line, 300, f) != '\n')

  {
      sscanf(line, "%99[^\n]", num);
      sscanf(line, "%99[^\n]", title);
      sscanf(line, "%99[^\n]", instructor);
      sscanf(line, "%99[^\n]", date);
      sscanf(line, "%99[^\n]", start_time);
      sscanf(line, "%99[^\n]", end_time);
      sscanf(line, "%99[^\n]", location);

      data[i].cse_num = num // doesn't work

      strcpy(data[i].course_title, title);
      strcpy(data[i].instructor, instructor);
      strcpy(data[i].date, date);
      strcpy(data[i].start_time, start_time);
      strcpy(data[i].end_time, end_time);
      strcpy(data[i].location, location);


      i++;


  }

  fclose(f);


}

私の質問は、新しい行が検討されるまで7行なので、ファイルからの入力をどのように取り込むかです。私はこれを説明するために最善を尽くしました、あなたが私を助けてくれるようにしてくれてありがとう!私は本当にこれに焦点を合わせましたが、正直に言うと理解できませんでした。これはファイルです:

入力例:

CSE1001
Research Directions in Computing
Wildes, Richard
W
16:30
17:30
VC 135
4

3 に答える 3

1

忘れないでください、あなたもしなければなりませんstrcpy(data[i].course_title, title);

これはすべての文字列に当てはまります。

あなたは現在これを行っています:data[i].course_title = title;

于 2013-03-25T19:29:20.040 に答える
0

scanfの使用を検討してください。fscanfこれは、端末またはバリアントを含むファイルからの入力を解析するための汎用関数です。これは、含めるライブラリの一部であり、プログラム出力に多くを使用するフォーマットと似てprintfいます。

于 2013-03-25T19:25:25.493 に答える
0

あなたは誤って宣言しましたmain()

struct course
{
    char course_title[200];
    int  cse_num[100];
    char instructor[200];
    char date[50];
    char start_time[50];
    char end_time[50];
    char location[50];
}

main()
{

これは、をmain()返すことを示していますstruct course。それは間違っている。

  1. 構造体の後にセミコロンを追加します。
  2. すべての関数に常に明示的な型を指定してください。C99はそれを必要とします。C89には良い習慣です。

コードは次のように開始する必要があります。

struct course
{
    char course_title[200];
    int  cse_num[100];
    char instructor[200];
    char date[50];
    char start_time[50];
    char end_time[50];
    char location[50];
};

int main(void)
{

この間違いについて、Cコンパイラから警告が表示されるはずです。そうでない場合は、警告をオンにするか、より優れたコンパイラを入手する必要があります。

これは、直面している他の問題に直接関係している場合と関係していない場合がありますが、修正する必要があります。

于 2013-03-25T19:27:34.723 に答える