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

我正在尝试扫描单行输入并将其存储在结构中。 我不确定我是否存储错误或者我打错了。 我不确定如何将scanffor循环一起使用,因为我从来没有这样做过,更不用说C喜欢覆盖东西了。 所以我不确定如何处理这个问题。

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

EDITED

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

你的阅读循环中有你的打印循环。 它正在尝试在读完第一个之后打印出所有的旅行信息。

编辑:麻烦在于scanf处理单个字符的方式在处理字符串和数字的方式旁边有点不直观。 它从标准输入中读取下一个字符,这可能是您完成键入上一个输入时的换行符。 然后它继续尝试读取一个整数,但它找到了你想要被%c消耗的字母。 这会导致scanf失败并且不会初始化stop_num

解决这个问题的一种方法可能是读取字符串。 scanf将开始在第一个非空白字符处读取字符串,并在第一个空白字符处停止读取它。 然后从你读取字符串的缓冲区中取出第一个字符。

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

scanf()用于获取运行时的值并在控制字符串中使用

 main() { //this RMVIVEK 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); }