Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序无法正确比较字符_C - Fatal编程技术网

C程序无法正确比较字符

C程序无法正确比较字符,c,C,我正在编写这段C代码,我不明白为什么它不起作用。我在这里看了其他的问题来比较两个字符,我用了完全相同的方法,但由于某些原因,它不起作用 当它运行时,它将对t和o起作用,但对c不起作用,即使我以相同的方式实现了它们 Split_字符串已提供给我们(无错误),并返回通过键盘输入的字符串中的字数。它还接收字符串数组,并将每个单词置于不同的索引中 如有任何建议,将不胜感激 char input[100]; printf("What commmand would you like to u

我正在编写这段C代码,我不明白为什么它不起作用。我在这里看了其他的问题来比较两个字符,我用了完全相同的方法,但由于某些原因,它不起作用

当它运行时,它将对t和o起作用,但对c不起作用,即使我以相同的方式实现了它们

Split_字符串已提供给我们(无错误),并返回通过键盘输入的字符串中的字数。它还接收字符串数组,并将每个单词置于不同的索引中

如有任何建议,将不胜感激

    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
的故障情况,以及错误的输出和预期的输出。