使用scanf扫描一行中的多个输入

Tha*_*yen 5 c struct for-loop scanf

我正在尝试扫描单行输入并将其存储在结构中.我不确定我是否存储错误或者我打错了.我不知道如何使用scanffor循环,因为我以前从来没有做到提ç喜欢的东西覆盖.所以我不确定如何处理这个问题.

这是我放在一起的东西,但是当我打印时,我得到了垃圾数字.我本打算使用指针,但我的教授不会让我们使用它.这就是我遇到麻烦的原因.

EDITED

#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);
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 7

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);

}
Run Code Online (Sandbox Code Playgroud)


Nul*_*Set 5

您的打印循环位于您的阅读循环内。它正在尝试在读取第一个行程信息后打印出所有行程信息。

编辑:这里的问题是scanf处理单个字符的方式与处理字符串和数字的方式有点不直观。它从标准输入中读取下一个字符,这可能是您完成上一个输入后的换行符。然后它继续尝试读取一个整数,但它找到了您打算由%c. 这会导致scanf失败并且无法初始化stop_num

解决这个问题的一种方法可能是读入字符串。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);
    }
}
Run Code Online (Sandbox Code Playgroud)