在我的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);
}
}
}
答案 0 :(得分:3)
if(command == "-d")
。完全没有。
command
指的是数组的基址。您想要的是比较这些数组的内容,而不是address
位置。
您可能想要使用strcmp()
。查看here
警告:要将char
数组用作字符串,您需要使用终止\0
[NULL
]字符。请改用char command[3];
。
编辑:
要解决更新代码中的问题,(复制到以下评论的答案中)
strcmp()
会返回0
。因此,要确定&#34;匹配条件&#34;,您需要使用if (!strcmp(str1,str2))
表单(请注意!
)。
为避免较长输入导致缓冲区溢出的可能性,请使用
将输入限制为scanf()
scanf("%2s", input); //when input is a 3 element char array
我希望您确实知道您的for(;;)
循环是一个绝对无限循环,因为您没有任何break
语句。尝试根据您方便的逻辑添加一个。
答案 1 :(得分:0)
要比较字符串使用strcmp
。 command == "-e"
是一种错误的比较方式。 command
衰减到指向输入的第一个元素的指针。通过执行command == "-e"
,您将指针与字符串进行比较。