web-dev-qa-db-ja.com

scanfを使用して1行から複数​​の入力をスキャンする

1行の入力でスキャンし、構造体に格納しようとしています。保存が間違っているのか、印刷が間違っているのかわかりません。 scanfforループで使用する方法がわかりません。これは、Cがものを上書きするのが好きなことは言うまでもなく、これまで行ったことがないためです。だから私はこれにどのようにアプローチするかわからなかった。

これは私がまとめたものですが、印刷するとジャンク番号が表示されます。ポインタを使うつもりだったのですが、教授は使わせてくれません。それが私が問題を抱えている理由です。

[〜#〜]編集済み[〜#〜]

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

#define MAX 3
#define MAXTRIP 6


struct stop
{
  float cost;
  float time; 
};

struct trip
{
  char Dest_letter;
  int stop_num;
  struct stop leg[MAX];
};

int main(void)
{
  int trip_num, index, i;
  struct trip travel[MAXTRIP];

  printf("Enter number of trips: ");
  scanf("%d", &trip_num);
  printf("Please enter destination letter/number of stops and cost/length of each stop:\n");
  for (index = 0; index < trip_num; index++)
    {
      scanf("%c %d", &travel[index].Dest_letter, &travel[index].stop_num);
      for ( i=0; i < travel[index].stop_num; i++)
    scanf("%f %f", &travel[index].leg[i].cost, &travel[index].leg[i].time);
    }
  for (index =0; index < trip_num; index++)
    {
      printf("Trip:%d \nDestination Letter:%c", index+1, travel[index].Dest_letter);
      for (i=0; i < travel[index].stop_num; i++)
    printf("Cost:%.2f \nLength:%.2f", travel[index].leg[i].cost, travel[index].leg[i].time);
    }
}
5
Thao Nguyen

読み取りループ内に印刷ループがあります。の最初の旅行情報を読んだ後、すべての旅行情報を印刷しようとしています。

編集:ここでの問題は、scanfが単一の文字を処理する方法が、文字列と数字を処理する方法の次に少し直感的でないことです。標準のの次の文字を読み取ります。これは、前の入力の入力が終了したときの改行文字である可能性があります。次に、整数の読み取りを試みますが、代わりに、%cによって消費されることを意図していた文字を見つけます。これにより、scanfが失敗し、stop_numが初期化されません。

これを回避する1つの方法は、代わりに文字列を読み取ることです。 scanfは、最初の非空白文字で文字列の読み取りを開始し、最初の空白文字で文字列の読み取りを停止します。次に、文字列を読み込んだバッファから最初の文字を取り出します。

#include <stdio.h>

#define MAX 3
#define MAXTRIP 6

struct stop {
    float cost;
    float time;
};

struct trip {
    char Dest_letter;
    int stop_num;
    struct stop leg[MAX];
};

int main(void)
{
    int trip_num, index, i;
    struct trip travel[MAXTRIP];
    char buffer[10];

    printf("Enter number of trips: ");
    scanf("%d", &trip_num);
    for (index = 0; index < trip_num; index++) {
        printf("Please enter destination letter/number of stops:\n");
        scanf("%s %d", buffer, &travel[index].stop_num);
        travel[index].Dest_letter = buffer[0];
        for (i = 0; i < travel[index].stop_num; i++){
            printf("Please enter cost/length of stop %d:\n", i);
            scanf("%f %f", &travel[index].leg[i].cost, &travel[index].leg[i].time);
        }
    }
    printf("%d trips\n", trip_num);
    for (index = 0; index < trip_num; index++) {
        printf("Trip:%d \nDestination Letter:%c\n", index + 1, travel[index].Dest_letter);
        for (i = 0; i < travel[index].stop_num; i++)
            printf("Cost:%.2f \nLength:%.2f\n", travel[index].leg[i].cost, travel[index].leg[i].time);
    }
}
2
Null Set

scanf()は、実行時の値を取得するために使用され、制御文字列で使用されます

main()

{

//this R.M.VIVEK coding for Scaning Multiple inputs from one line using scanf

int r,m,v1,i,v,e,k;

char a,b,c;

float  x,y,z;

clrscr();


printf("enter the Your five subject marks");

//%d is integer format ,

scanf("%d%d%d%d%d",&r,&m,&v,&i,&e);

//%c is char format and %s is a sting formar

printf("enter the any character values");

scanf("%c%c%c",a,b,c);

//%f is float format

printf("enter the Your height and wight");

scanf("%f%f",&x,&y);

}
3
R.M.VIVEK ARNI