C跳过一个函数的命令?

我正在编程一个模拟,当用户select创build一个新的标签时,用户应该input一个标签ID,标签的所有者和标签所代表的对象。 该程序正在做什么只是跳过命令,扫描所有者,我不知道为什么。 我的代码如下(function在iotlib.cpp中):

iotlib.cpp

#include <stdio.h> #include <stdlib.h> #include <math.h> #define MAX 20 struct tagInfo { char owner[MAX]; char object[MAX]; int id; }; struct tre //TRE = Tag Read Event { int id; char node[MAX]; int dx; }; void initTag(struct tagInfo tag[], int numTags) { for(int i=0; i<numTags; i++) { printf("Enter the tag ID number: "); scanf("%i", &tag[i].id); printf("Enter owner of tag: "); scanf("%c", &tag[i].owner); printf("Enter the object the tag is attached to: "); scanf("%c", &tag[i].object); } } void generateTRE(struct tre event[], int numEvents) { for(int i=0; i<numEvents; i++) { printf("Enter tag ID: "); scanf("%i", &event[i].id); printf("Enter node: "); scanf("%c", &event[i].node); printf("Enter distance from node as an integer number of feet: "); scanf("%c", &event[i].dx); } } void triangulationSimulate(struct tre event1, struct tre event2, int numEvents) { if(numEvents>1 && event1.id==event2.id) { printf("Node %c", event1.node); for(int i=0; i<event1.dx; i++) { printf(" "); } printf("Tag %i", event1.id); for(int i=0; i<event2.dx; i++) { printf(" "); } printf("Node %c", event2.node); } } void getTagInfo(struct tagInfo tag) { printf("The tag with ID %i represents a/an %c belonging to %c", tag.id, tag.object, tag.owner); } 

main.cpp中

 #include <stdio.h> #include <stdlib.h> #include <math.h> #include "iotlib.cpp" void execute(); int main(void) { execute(); return 0; } void execute() { struct tagInfo tags[5]; struct tre events[5]; int choice, numTags, numEvents; printf("!Simulation supports a maximum of 5 tags and 5 nodes!\n\n"); printf("Choose a function by entering it's number:\n1. Create tags\n2. Generate Tag Read Events\n3. Triangulate tag\n4. Recall tag metadata\n\n"); scanf("%i", &choice); if(choice==1) { printf("Enter the number of tags to initialize (max of 5): "); scanf("%i", &numTags); if(numTags<1 || numTags>5) { printf("Invalid datum.\n"); } else { initTag(tags, numTags); } } else if(choice==2) { printf("Enter the number of TRE's to be generated (max of 5: "); scanf("%i", &numEvents); if(numEvents<1 || numEvents>5) { printf("Invalid datum.\n"); } else { generateTRE(events, numEvents); } } else if(choice==3) { int eventX, eventY; printf("Enter two existing TRE numbers to use, separated by a space: "); scanf("%i %i", &eventX, &eventY); triangulationSimulate(events[eventX], events[eventY], numEvents); } else if(choice==4) { int tagNum; printf("Enter a tag number: "); scanf("%i", &tagNum); getTagInfo(tags[tagNum-1]); } else { printf("Invalid selection.\n"); } execute(); } 

第1点 [编程错误]

这里的问题是使用%c格式说明符。 它对之前input的\n 计数 ,按上一次input后按ENTER键存储。 你想要的是

 scanf(" %c", &tag[i].owner); ^ | note the space 

在实际input之前跳过像字符(包括\n )之类的任何空白字符。

第2点 [逻辑错误]

根据你的代码在这里扫描一个stringinput,你需要使用%s格式说明符。

所以,最后,你的代码应该看起来像

  scanf("%s", tag[i].owner); // if tag[i].owner is char array 

要么

  scanf(" %c", &tag[i].owner); // if tag[i].owner is a char, just in case 

%c是一个字符的说明符,你试图input一个string,而不是一个字符。 请参阅scanf文档 。 你想使用的是string的%s说明符。