Сканирование нескольких входов из одной строки с помощью scanf - PullRequest
5 голосов
/ 28 марта 2011

Я пытаюсь сканировать в одной строке ввода и сохраняю его в структуре. Я не уверен, что я храню это неправильно или я печатаю это неправильно. Я не уверен, как использовать scanf с for циклами, так как я никогда не делал этого раньше, не говоря уже о том, что C любит перезаписывать вещи. Так что я не был уверен, как подойти к этому.

Это то, что я собираю, но когда я печатаю, я получаю ненужные номера. Я собирался использовать указатели, но мой профессор не позволил нам их использовать. Вот почему у меня проблемы.

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

Ответы [ 2 ]

3 голосов
/ 14 октября 2014

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 голосов
/ 28 марта 2011

У вас есть цикл печати внутри цикла чтения. Он пытается распечатать всю информацию о поездке после прочтения первого в.

Редактировать: Проблема в том, что способ scanf обработки одиночных символов является довольно неинтуитивным по сравнению с тем, как он обрабатывает строки и числа. Он читает следующий символ из стандартного in, который, вероятно, является символом новой строки после того, как вы закончили ввод предыдущего ввода. Затем он пытается прочитать целое число, но вместо этого находит письмо, которое вы намеревались использовать в %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);
    }
}
...