C程序无法正确比较字符
我正在编写这段C代码,我不明白为什么它不起作用。我在这里看了其他的问题来比较两个字符,我用了完全相同的方法,但由于某些原因,它不起作用 当它运行时,它将对t和o起作用,但对c不起作用,即使我以相同的方式实现了它们 Split_字符串已提供给我们(无错误),并返回通过键盘输入的字符串中的字数。它还接收字符串数组,并将每个单词置于不同的索引中 如有任何建议,将不胜感激C程序无法正确比较字符,c,C,我正在编写这段C代码,我不明白为什么它不起作用。我在这里看了其他的问题来比较两个字符,我用了完全相同的方法,但由于某些原因,它不起作用 当它运行时,它将对t和o起作用,但对c不起作用,即使我以相同的方式实现了它们 Split_字符串已提供给我们(无错误),并返回通过键盘输入的字符串中的字数。它还接收字符串数组,并将每个单词置于不同的索引中 如有任何建议,将不胜感激 char input[100]; printf("What commmand would you like to u
char input[100];
printf("What commmand would you like to use? t, o, or c\n");
while(fgets(input, 100, stdin)!=NULL){
char ** ptr = malloc(sizeof(char*)*10);
int wordno = split_string(input, ptr);
if((*ptr[0]=='t') && wordno==1) {
text(root_ptr);
} else if(*ptr[0]=='t' && wordno>1){
printf("No arguments for function t\n");
} else if(*ptr[0]='o' && wordno==9){
open(root_ptr);
} else if(*ptr[0]=='o' && wordno != 9){
printf("Need 8 attributes to open o\n");
} else if(*ptr[0]=='c' && wordno==2){
open(root_ptr);
} else if(*ptr[0]=='c' && wordno !=2){
printf("Only need 2 arguments to copy\n");
} else {
printf("Please enter a value command\n");
}
printf("Enter t to text, o to open or c to copy\n");
}
检查以下行。缺少a=因此实际上将
o
分配给数组的第一个元素,而不是与o
进行比较。之后,它永远不能是c
} else if(*ptr[0]='o' && wordno==9){
检查以下行。缺少a=因此实际上将
o
分配给数组的第一个元素,而不是与o
进行比较。之后,它永远不能是c
} else if(*ptr[0]='o' && wordno==9){
错误在这里:
else if(*ptr[0]='o' && wordno==9){
强制第一个字符为“o”。因此,我通常以以下形式编写比较:
即使它一开始看起来很尴尬,也太过分了。如果忘记了等号,编译器将抛出一个错误
但是,应该通过激活编译器上的完整警告来捕获这种行为。我强烈建议你一直戴着它们
此外,您在每个周期再次分配内存,导致泄漏(这不会很快影响到您,如果有的话,但仍然):
最后,使用switch
语句可能会更好:
switch(*ptr[0]) {
case 't':
...
break;
...
default:
printf("Huh?\n");
break;
}
错误在这里:
else if(*ptr[0]='o' && wordno==9){
强制第一个字符为“o”。因此,我通常以以下形式编写比较:
即使它一开始看起来很尴尬,也太过分了。如果忘记了等号,编译器将抛出一个错误
但是,应该通过激活编译器上的完整警告来捕获这种行为。我强烈建议你一直戴着它们
此外,您在每个周期再次分配内存,导致泄漏(这不会很快影响到您,如果有的话,但仍然):
最后,使用switch
语句可能会更好:
switch(*ptr[0]) {
case 't':
...
break;
...
default:
printf("Huh?\n");
break;
}
对这样一个答案的标准补充是打开编译器警告!对这样一个答案的标准补充是打开编译器警告!欢迎来到堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请查看页面,同时请指定
c
的失败情况,错误的输出是什么,预期的输出是什么。欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请参见页面,并请指定c
的故障情况,以及错误的输出和预期的输出。