为了账号安全,请及时绑定邮箱和手机立即绑定

C跳过一个函数的命令?

C跳过一个函数的命令?

C C++
狐的传说 2019-07-13 16:09:44
我正在编写一个模拟程序,当用户选择创建一个新的标记时,用户应该输入一个标签ID、标签的所有者和标记所代表的对象。程序所做的只是跳过扫描所有者的命令,我不太清楚原因。我的代码如下(函数在iotlib.cpp中):iotlib.cpp#include <stdio.h>#include <stdlib.h>#include <math.h>#define MAX 20struct 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);}
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

第1点[程序错误]

这里的问题是%c格式说明符。它数数以前输入的\n,通过按下进入前一次输入后的键。你想要的是

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

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

第2点[逻辑错误]

按照这里的代码,扫描 a 输入,您需要使用%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


查看完整回答
反对 回复 2019-07-13
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

%c是字符的说明符,您要输入的是字符串,而不是字符。见扫描文件..要使用的是字符串的%s说明符。


查看完整回答
反对 回复 2019-07-13
  • 2 回答
  • 0 关注
  • 646 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信