我的C语言简单加密有什么问题?(cs50 pset 2-密码)

我的C语言简单加密有什么问题?(cs50 pset 2-密码),c,cs50,C,Cs50,我不太明白这些错误是从哪里来的。我正在尝试创建一个简单的C程序,它接受一个字符串并向ASCII值添加一个偏移量,以便创建一个非常简单的加密 #include <stdio.h> #include <cs50.h> #include <stdlib.h> #include <string.h> char obscufate_char(char origchar, int offset){ if(strcmp(origchar, " ") !

我不太明白这些错误是从哪里来的。我正在尝试创建一个简单的C程序,它接受一个字符串并向ASCII值添加一个偏移量,以便创建一个非常简单的加密

#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>
#include <string.h>

char obscufate_char(char origchar, int offset){
    if(strcmp(origchar, " ") != 0){
        int temp = origchar;
        char newChar = temp + 4;
        return newChar;
    }
    else{
        return 20;
    }
} 

int main(int argc, string argv[]){

    if(argv[1] != NULL){
        string message = argv[1];
    }else{
        printf("%s\n", "Enter a string to encrypt\n");
        string message = GetString();
    }

    if(argv[2] != NULL){
        int offset = atoi(argv[2]);
    }else{
        printf("%s\n", "Enter a offset\n");
        int offset = GetInt();
    }

    printf("%s%s\n", "Your original text is: ", message);
    printf("%s\n", "Your new message is: ");
    for(int i = 0; i < strlen(message); i++){
        printf("%c\n", obscufate_char(message[i]),offset);
    }

    return 0;
}
#包括
#包括
#包括
#包括
字符obscufate_char(字符原始字符,整数偏移){
如果(strcmp(origchar,“”))=0){
内部温度=原始温度;
char newChar=temp+4;
返回newChar;
}
否则{
返回20;
}
} 
int main(int argc,字符串argv[]){
如果(argv[1]!=NULL){
字符串消息=argv[1];
}否则{
printf(“%s\n”,“输入要加密的字符串\n”);
string message=GetString();
}
如果(argv[2]!=NULL){
int offset=atoi(argv[2]);
}否则{
printf(“%s\n”,“输入偏移量”);
int offset=GetInt();
}
printf(“%s%s\n”,“您的原始文本为:”,消息);
printf(“%s\n”,“您的新邮件是:”);
对于(int i=0;i
simple\u crypt.c:7:12:错误:传递不兼容的整数到指针转换
“char”到“const char*”类型的参数;带上地址&
[-Werror]
如果(strcmp(origchar,“”))=0){
^~~~~~~~
&
/usr/include/string.h:143:34:注意:在这里将参数传递给参数“\uu s1”
外部内部strcmp(uuu常量字符*uuu s1,uuu常量字符*uu s2)
^
simple_crypt.c:20:10:错误:未使用的变量“message”
[-Werror,-Wunused变量]
字符串消息=argv[1];
^
simple_crypt.c:23:10:错误:未使用的变量“message”
[-Werror,-Wunused变量]
string message=GetString();
^
simple_crypt.c:27:7:错误:未使用的变量“offset”[-Werror,-Wunused变量]
int offset=atoi(argv[2]);
^
simple_crypt.c:30:7:错误:未使用的变量“offset”[-Werror,-Wunused变量]
int offset=GetInt();
^
simple_crypt.c:33:46:错误:使用未声明的标识符“message”
printf(“%s%s\n”,“您的原始文本为:”,消息);
^
simple_crypt.c:35:28:错误:使用未声明的标识符“message”
对于(int i=0;i
当函数需要字符*时,您正在传递字符。origchar不是字符*

simple_crypt.c:20:10: error: unused variable 'message'
      [-Werror,-Wunused-variable]
                string message = argv[1];
我假设cs50.h有一个“字符串”类型供您使用。您在if语句中进行初始化,并且希望它在if语句的范围之外出现,这是不会发生的。if语句之外的
消息
与内部的
消息
不同只是声明并初始化了,但没有对它做任何处理,本质上使它在其作用域中未被使用。对于编译器来说,if语句之外的消息是一个未声明的变量

您应该首先在if语句之外声明
message
,这样编译器就知道消息是在main语句的范围内创建的,并且将在main语句的范围内创建,或者至少可以在if语句的范围外看到消息。您可以在if语句中为其赋值,但如果需要的话,不应该在if语句中声明它在if语句之外可以看到。if语句有自己的作用域,因此在它完成后,初始化的
消息将消失,而不会对其执行任何操作


对于
offset
消息的其余部分
错误也一样。

if
语句之前声明变量,然后在
if
分支中为其赋值

string message; 
if() 
{
   message = Whatever;
} 
else 
{
   message = SomethingElse;
};
如果第19行的第一个
if(argv[1]!=NULL)
条件未满足,则不使用第20行声明的
消息变量

printf("%c\n", obscufate_char(message[i]),offset);
您没有正确地关闭括号。您的函数接受两个参数

printf("%c\n", obscufate_char(message[i],offset));

首先,您的
main
中存在语法错误:

printf(“%c\n”,obscufate_char(message[i]),offset);

应该是,否则整个obscufate_char()都会失败

printf(“%c\n”,obscufate_char(消息[i],偏移量));

其次,您应该在“if”之外声明
消息
偏移量
,最好在
的开头。
因为在
中声明如果
在它之外不起作用,那么在
for
循环中声明
i
也是如此。

你的意思是你不明白为什么会有这些错误吗?因为编译器会准确地告诉你它们来自哪里,而且就这一点而言,它会告诉你它认为什么是错误的我不明白这些错误来自于所有变量似乎都被使用了两个提示:第一个错误是无效类型,因此请了解“指针和引用”,其他错误是因为您使用的变量超出了它们的范围,请参阅“c中的变量范围规则”.等我有更多的时间写一个更完整的答案时,我会试着回来的…你拼错了“模糊”。
printf("%c\n", obscufate_char(message[i],offset));