输入比较不正常,总是去失败的情况下,为什么?

时间:2014-01-09 19:48:07

标签: c pointers if-statement scanf

在我的C程序中,我尝试使用scanf从控制台获取字符串(char*)输入,但是输入总是变成值1638238,无论输入什么:

#include <stdio.h>
int main(void){
    for(;;){
        printf("Choose your option:\n-d for decryption\n-e for encryption\n");
        char command[2];
        char* input = command;
        scanf("%s", input);
        if(command == "-d"){
            printf("Please enter the path of the file\n");
            // decrypt
        }
        else if(command == "-e"){
            printf("Please enter the path of the file\n");
            // encrypt
        }
        else{
            printf("Unrecognized command '%d'\n", command);
        }
    }
}

示例:

  

输入:-e

     

输出:无法识别的命令'1638238'

编译器:Tiny C


编辑:我可以输入任何内容,然后输出

  

请输入要解密的文件的路径

#include <stdio.h>
#include <string.h>
int main(void){
    for(;;){
        printf("Choose your option:\n-d for decryption\n-e for encryption\n");
        char command[3];
        char* input = command;
        scanf("%s", input);
        if(strcmp(input, "-d")){
            printf("Please enter the path of the file to be decrypted\n");
        }
        else if(strcmp(input, "-e")){
            printf("Please enter the path of the file to be encrypted\n");
        }
        else{
            printf("Unrecognized command '%d'\n", input);
        }
    }
}

2 个答案:

答案 0 :(得分:3)

if(command == "-d")。完全没有。

command指的是数组的基址。您想要的是比较这些数组的内容,而不是address位置。

您可能想要使用strcmp()。查看here

警告:要将char数组用作字符串,您需要使用终止\0 [NULL]字符。请改用char command[3];


编辑:

要解决更新代码中的问题,(复制到以下评论的答案中)

    如果匹配,
  1. strcmp()会返回0。因此,要确定&#34;匹配条件&#34;,您需要使用if (!strcmp(str1,str2))表单(请注意!)。

  2. 为避免较长输入导致缓冲区溢出的可能性,请使用

    将输入限制为scanf()
    scanf("%2s", input);  //when input is a 3 element char array
    
  3. 我希望您确实知道您的for(;;)循环是一个绝对无限循环,因为您没有任何break语句。尝试根据您方便的逻辑添加一个。

答案 1 :(得分:0)

要比较字符串使用strcmpcommand == "-e"是一种错误的比较方式。 command衰减到指向输入的第一个元素的指针。通过执行command == "-e",您将指针与字符串进行比较。