gpt4 book ai didi

C跳过一个函数的一个命令?

转载 作者:行者123 更新时间:2023-12-04 10:56:59 24 4
gpt4 key购买 nike

我正在编写一个模拟程序,当用户选择创建一个新标签时,用户应该输入标签 ID、标签的所有者以及标签所代表的对象。该程序正在做的只是跳过扫描所有者的命令,我不太清楚为什么。我的代码如下(函数在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 格式说明符的使用。它计算先前输入的\n,在先前输入后按ENTER键存储。你想要的是

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

在实际输入之前跳过任何前导空格,如字符(包括 \n)。

第 2 点 [逻辑错误]

根据您的代码,scan string 输入,您需要使用 %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跳过一个函数的一个命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29658685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com