微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在函数中使用char后无法打印char

如何解决在函数中使用char后无法打印char

我有一个输入,它是Number1,Number2Command,例如1,3c 1,5d 10,40p,我想将“ command”传递给该函数,并将其返回值c,d,p ...在我的代码中,strpbrk出现问题(返回指针),因为我无法打印命令。

#include <stdio.h>
#include <stdlib.h>
typedef enum Command
{
    ChangeCommand = 'c',DeleteCommand = 'd',PrintCommand = 'p',UndoCommand = 'u',RedoCommand = 'r',} Command;
char input[1025];
void funzione(int *val1,int *val2,char command){
    fgets(input,1025,stdin);
    if (input[0] == 'q')
    {
        exit(2);
    }
    char *pEnd;
    *val1 = strtol(input,&pEnd,10);
    *val2 = strtol(pEnd + 1,10);
    char letters[5] = "crpud";
    command = strpbrk(input,letters);
}
int main(int argc,char *argv[]) {
    int val1;
    int val2;
    char command;
    funzione(&val1,&val2,command);
    printf("%d %d %c",val1,val2,command);
    switch (command)
        {
        case ChangeCommand:
   
            break;

        case DeleteCommand:
            
            break;

        case PrintCommand:
       
            break;

        case UndoCommand:
     
            break;

        case RedoCommand:
      
            break;
        default:
            exit(1);
            break;
        }
    return 0;
}

解决方法

  • strpbrk()返回一个指针,因此请取消引用以获取值。
  • 参数command应该是val1val2之类的指针,以使其将信息传递给main()
  • letters中没有终止的空字符,因此在需要字符串的地方使用它很危险。

固定代码:

void funzione(int *val1,int *val2,char *command){ /* add * before command */
    /* omitted,same as original */
    char letters[] = "crpud"; /* remove explicit size to have it calculate including terminating null-character */
    char* p_command = strpbrk(input,letters); /* obtain a pointer */
    *command = p_command != NULL ? *p_command : '\0'; /* dereference it (avoid dereferencing NULL) */
}

funzione(&val1,&val2,command);
main()中的

应该是

funzione(&val1,&command);

&之前添加了command

,

如评论中所述,编译器会出于某种原因向您发出警告。 您对command = strpbrk(input,letters)所做的工作是将char*strpbrk()返回的内容)转换为charcommand是什么)。

那边,做

char letters[5] = "crpud";
command = strpbrk(input,letters);

input内部查找“ crpud”的第一次出现。我认为您想要的是input中第一次出现“ c”或“ r”或“ p”或“ u”或“ d”。
这是解决此问题的一种方法:


void funzione(int *val1,char *command){
    fgets(input,1025,stdin);
    if (input[0] == 'q')
    {
        exit(2);
    }
    char *pEnd;
    *val1 = strtol(input,&pEnd,10);
    *val2 = strtol(pEnd + 1,10);
    char letters[5] = "crpud";
    for (int i=0; i<5; i++) 
    {
        if (strchr(input,letters[i])) 
        {
            *command = letters[i];
            break;
        }
    }
}

然后将funzione()与指向command的指针一起使用:

int val1;
int val2;
char command;
funzione(&val1,&command);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。