-2
struct student
{
    char am[7];/* èá íáé*/
    float final_grade;
    float exam_grade;
    float essay_grade;
};
struct student mathites[1];

do{
    printf("Dwse A.M.:");
    scanf("%s",&mathites[j].am);
} while((mathites[j].am<8120000) || (mathites[j].am>812015));

このような投稿を見たのですが、「==」との比較についてみんなから聞かれるので、答えは strcmp ですが、この場合も同様ですか?

4

1 に答える 1

1

something similar for this case?

文字列が数値の範囲内にあるかどうかを確認しようとしているため、これは少し異なります。

最初にいくつかのポイント:


struct student mathites[1];

1 の配列を宣言する場合は、それを配列にしない方がよいでしょう。

char am[7];/* èá íáé*/

比較する最大値が 7 文字の "8120000" の場合、配列のサイズを 8 にする必要があります (null ターミネータのスペースを含めるため)。

scanf("%s",&mathites[j].am);}

文字列を取得するときに演算子を使用する必要はありません&。また、文字列がオーバーフローしないようにリミッターを使用する必要があります


したがって、これを考慮すると、コードは次のようになるはずです。

struct student
{
      char am[8];/* èá íáé*/
      float final_grade;
      float exam_grade;
      float essay_grade;
};

struct student mathites;
do  {
    printf("Dwse A.M.:");
    scanf("%7s",mathites.am);}

実際の質問では、最初に文字列を数値に変換してから、値を確認する必要があります。

    long str_value = strtol(mathites.am, NULL, 10);
}
while((str_value <8120000) || (str_value >812015));
于 2013-01-17T18:21:25.253 に答える