如何解决在函数中使用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
应该是val1
和val2
之类的指针,以使其将信息传递给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()
返回的内容)转换为char
(command
是什么)。
那边,做
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 举报,一经查实,本站将立刻删除。