Numérisation de Plusieurs entrées à partir d'une ligne à l'aide de scanf
Je suis en train de numériser en une seule ligne d'entrée et de les stocker dans une structure (struct). Je ne sais pas si je suis le ranger mal ou je suis d'impression de mal. Je ne suis pas sûr sur la façon d'utiliser scanf
avec for
boucles depuis je n'ai jamais fait avant pour ne pas mentionner C aime écraser des trucs. Donc, je n'étais pas sûr de la façon d'aborder cette.
C'est quelque chose que j'ai mis ensemble, mais quand j'ai l'impression-je obtenir indésirable numéros. J'avais l'intention de peut-être utiliser des pointeurs, mais mon professeur ne nous laisse pas l'utiliser. C'est pourquoi je vais avoir des ennuis.
ÉDITÉ
#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);
}
}
OriginalL'auteur Thao Nguyen | 2011-03-28
Vous devez vous connecter pour publier un commentaire.
Vous avez votre boucle d'impression à l'intérieur de votre lecture de la boucle. Il est en train d'imprimer toutes les informations du voyage après la lecture de la première.
Edit: Le problème ici c'est que la façon
scanf
poignées de caractères unique est un peu peu intuitive à côté de la façon dont il gère des chaînes et des nombres. Il lit le très prochain caractère à partir de la norme, ce qui est probablement un caractère de saut de ligne à partir de quand vous avez fini de saisir les entrées précédentes. Puis il procède à essayer de le lire en entier, mais au lieu de cela, il trouve la lettre que vous avez eu destinée à être consommée par les%c
. Cela provoquescanf
de l'échec et de ne pas s'initialiserstop_num
.Un moyen de contourner cela peut être à lire dans une chaîne de caractères à la place.
scanf
va commencer la lecture de la chaîne du premier caractère non-blanc et d'arrêter la lecture du premier caractère d'espacement. Puis il suffit de prendre le premier caractère de la mémoire tampon vous lire la chaîne de caractères.Nguyen voir mes modifications.
OriginalL'auteur Null Set
scanf()
est utilisée pour obtenir une valeur pour l'exécution et utilisés dans la chaîne de contrôleOriginalL'auteur R.M.VIVEK ARNI