【问题标题】:Scanning Multiple inputs from one line using scanf使用 scanf 从一行扫描多个输入
【发布时间】:2011-07-24 03:27:03
【问题描述】:

我正在尝试扫描单行输入并将其存储在结构中。我不确定是我存储错误还是打印错误。我不确定如何将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);
    }
}

【问题讨论】:

    标签: c struct for-loop scanf


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      编辑:这里的问题是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);
          }
      }
      

      【讨论】:

      • 这可能解释了无限循环,但我仍然收到垃圾数字..当我编译时
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      相关资源
      最近更新 更多