1
#include <stdio.h>
#define MAX_SIZE 20

int main()
{
  int age;
  char name[MAX_SIZE];
  float wage;

  printf("input name, age and wage: ");

  scanf("%s %s %s", name, &age, &wage); //LINE 10
}

コンパイルしようとした後:

lab4q5.c: In function 'main':
lab4q5.c:10: warning: format '%s' expects type 'char *', but argument 3 has type 'int*'
lab4q5.c:10: warning: format '%s' expects type 'char *', but argument 4 has type 'float *'
lab4q5.c:16: warning: control reaches end of non-void function

私は C プログラミングが初めてで、自分のラボの 1 つの文字列としてfloatandをスキャンしたいと考えています。intに変更できることはわかっ%s %s%f %dおり、正常にコンパイルされるはずですが、 としてスキャンするように求められてい%sます。

ループを使用して、(標準入力から) 入力を読み取ります。1 行に 1 つの入力で、ユーザー情報について名前 age 賃金の形式で読み取ります。ここで、年齢は整数リテラルで、賃金は最大 2 つの 10 進数の浮動小数点リテラルです。• scanf(“%s %s %s”, 名前, 年齢, 賃金) を使用して、3 つの入力「文字列」を読み取ります。

したがって、コメントを読んだ後、それらを文字列としてフォーマットし、後で int および float として操作することを心配することにしました。これは私がこれまでに持っているものです:

#include <stdio.h>
#define MAX_SIZE 20
#define MAX_AGE 3
int isXX(char name[])
{
if (name[0] == 'X' && name[1] == 'X' && name[2] == '\0')
return 0; //return return false to quit
else 
return 1; //return true 
}

int main()
{

char age[MAX_AGE];
char wage[MAX_SIZE];
char name[MAX_SIZE];

printf("input name, age and wage: ");//enter name as XX to quit
scanf("%s %s %s", name, age, wage);
    while(isXX(name[])) // //LINE 22
    {
        printf("input name, age and wage: ");//enter name as XX to quit 
        scanf("%s %s %s", name, age, wage);
    }
return 0;
}

なぜコンパイラでこのエラーが発生するのかわかりませんが、私は

lab4q5.c: In function âmainâ:
lab4q5.c:22: error: expected expression before â]â token
4

3 に答える 3

5

atoiand関数を使用atofして、文字列からintand にfloatそれぞれ変換します。age最初に とを文字列として読み取り、wageこれらの関数を使用して文字列からそれぞれの型に変換し、対応する新しい変数に割り当てることができます。

ところで、stdlib.h正しく動作させるために含めることを忘れないでください。

コードの修正バージョン:

#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 20

int main()
{
char age[MAX_SIZE];
char name[MAX_SIZE];
char wage[MAX_SIZE];
int ageInteger;
float wageFloat;
printf("input name, age and wage: ");
scanf("%s %s %s", name, age, wage); //LINE 10

ageInteger=atoi(age);
wageFloat=atof(wage);
printf("Age:%d, Wage:%f\n",ageInteger,wageFloat);

return 0;
}

お役に立てれば...

編集:

1 つのコメントは、が誤った場合に未定義の動作をすることを指摘し、atoi,の代わりにandを使用することも提案しています。私自身、これについては知りません。したがって、これらを使用する前にこれを注意して、いくつかの調査によって慎重に選択してください。atofstdtolstdtodatoiatof

于 2013-06-12T15:15:36.297 に答える
3

それらを文字列として読み取り、文字列以外の変数に割り当てています。

したがって、コードを次のように変更する必要があります。

 int age;
 char name[MAX_SIZE];
 float wage;

に:

 char age [3];
 char name[MAX_SIZE];
 char wage[MAX_SIZE];

また

scanf("%s %s %s", name, &age, &wage)

scanf("%s %d %f", name, &age, &wage)

あなたの質問へのコメントに基づいて、私の質問は、なぜそれらを最初から文字列として使用したいのですか?

于 2013-06-12T15:08:10.523 に答える
2

文字列を読み込もうとしていますが、値を文字列以外に割り当てています。

scanf フォーマット文字列で正しいタイプを使用してみてください。

scanf("%s %d %f", name &age &wage);

ウィキペディアでscanfフォーマット文字列がどのように使用されているかを見ることができます

于 2013-06-12T15:10:10.580 に答える