我不太明白这些错误来自哪里。我正在尝试创建一个简单的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;
}
simple_crypt.c:7:12: error: incompatible integer to pointer conversion passing
'char' to parameter of type 'const char *'; take the address with &
[-Werror]
if(strcmp(origchar, " ") != 0){
^~~~~~~~
&
/usr/include/string.h:143:34: note: passing argument to parameter '__s1' here
extern int strcmp (__const char *__s1, __const char *__s2)
^
simple_crypt.c:20:10: error: unused variable 'message'
[-Werror,-Wunused-variable]
string message = argv[1];
^
simple_crypt.c:23:10: error: unused variable 'message'
[-Werror,-Wunused-variable]
string message = GetString();
^
simple_crypt.c:27:7: error: unused variable 'offset' [-Werror,-Wunused-variable]
int offset = atoi(argv[2]);
^
simple_crypt.c:30:7: error: unused variable 'offset' [-Werror,-Wunused-variable]
int offset = GetInt();
^
simple_crypt.c:33:46: error: use of undeclared identifier 'message'
printf("%s%s\n", "Your original text is: ", message);
^
simple_crypt.c:35:28: error: use of undeclared identifier 'message'
for(int i = 0; i < strlen(message); i++){
^
simple_crypt.c:36:33: error: use of undeclared identifier 'message'
printf("%c\n", obscufate_char(message[i]),offset);
答案 0 :(得分:1)
simple_crypt.c:7:12: error: incompatible integer to pointer conversion passing
'char' to parameter of type 'const char *'; take the address with &
[-Werror]
if(strcmp(origchar, " ") != 0){
当函数需要char *时传递一个字符。 origchar不是char *。
simple_crypt.c:20:10: error: unused variable 'message'
[-Werror,-Wunused-variable]
string message = argv[1];
我假设cs50.h对你有一个'字符串'类型。您正在if语句中进行初始化,并且您希望在if语句的范围之外看到它,这是不会发生的。 if语句之外的message
与里面的message
不同。内部的消息只是声明和初始化,但没有做任何事情,基本上使它的范围未使用。对于编译器,if语句之外的消息是未声明的变量。
您应首先在if语句之外声明message
,以便编译器知道该消息是并且将在main范围内创建,或至少在if语句的范围之外被看到。您可以在if语句中为其赋值,但如果您希望在if语句之外看到它,则不应在if语句中声明它。 if语句有自己的范围,因此在完成之后,您初始化的message
将会消失而不对其执行任何操作。
offset
和其他message
错误相同。
答案 1 :(得分:1)
printf("%c\n", obscufate_char(message[i]),offset);
您没有正确关闭括号。你的函数有两个参数。
printf("%c\n", obscufate_char(message[i],offset));
答案 2 :(得分:1)
首先,main
:
printf("%c\n", obscufate_char(message[i]),offset);
应该是,否则你的整个obscufate_char()都会失败
printf("%c\n", obscufate_char(message[i], offset));
其次,您应该在{if'之外声明message
和offset
,最好是在main
的开头。
因为在if
内声明不起作用,所以在i
循环中声明for
也是如此。
答案 3 :(得分:0)
在if
语句之前声明变量,然后在if
分支中为它们赋值。
string message;
if()
{
message = Whatever;
}
else
{
message = SomethingElse;
};
如果未满足第19行的第一个message
条件,则第20行声明的if(argv[1] != NULL)
变量未使用。