猿问

C跳过一个函数的命令?

我正在编写一个模拟程序,当用户选择创建一个新的标记时,用户应该输入一个标签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);}



狐的传说
浏览 647回答 2
2回答

慕神8447489

第1点[程序错误]这里的问题是%c格式说明符。它数数以前输入的\n,通过按下进入前一次输入后的键。你想要的是scanf("&nbsp;%c",&nbsp;&tag[i].owner); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;&nbsp;&nbsp;&nbsp;note&nbsp;the&nbsp;space跳过任何类似字符的前导空格(包括\n)在实际输入之前。第2点[逻辑错误]按照这里的代码,扫描&nbsp;a&nbsp;弦输入,您需要使用%s格式说明符。因此,最后,您的代码应该如下所示&nbsp;&nbsp;&nbsp;scanf("%s",&nbsp;tag[i].owner);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;tag[i].owner&nbsp;is&nbsp;char&nbsp;array或&nbsp;&nbsp;scanf("&nbsp;%c",&nbsp;&tag[i].owner);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;tag[i].owner&nbsp;is&nbsp;a&nbsp;char,&nbsp;just&nbsp;in&nbsp;case

鸿蒙传说

%c是字符的说明符,您要输入的是字符串,而不是字符。见扫描文件..要使用的是字符串的%s说明符。
随时随地看视频慕课网APP
我要回答