以下函数应该加密最多10个字符串。
#include <stdio.h>
#include <string.h>
void crypt(char*);
int main()
{
//one random message of up to 10 chars and function call.
char str[7] = "george";
crypt(str);
printf("%s",str);
}
//this function crypt's the initial string's message.
void crypt(char str[])
{
int i=0;
while ((i<=10)&&(str[i]!='\0'))
{
if (str[i]<=119) {str[i] = str[i] + 3;}
else if (str[i]==120) {str[i]='a';}
else if (str[i]==121) {str[i]='b';}
else {str[i]='c';}
i++;
}
}
}
相反,DevC ++给了我这个错误:
***In function 'int main':
[Error] invalid conversion from 'char*' to 'char' [-fpermissive]
[Error] initializing argument 1 of 'void crypt(char)' [-fpermissive]***
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:2)
你可以尝试这样的事情
void crypt(char* str) // to conform with your prototype
{
for (int i = 0; str[i] != '\0' && i < 10; ++i)
{
if (str[i]<=119) { str[i] = str[i] + 3; }
else if (str[i]==120) { str[i]='a'; }
else if (str[i]==121) { str[i]='b'; }
else { str[i]='c'; }
}
}
答案 1 :(得分:1)
你应该替换
int i=0;
if (str[0]!='\0')
{
do
{
...
}while ((i<=10)||(str[i]=='\0'));
}
(包含while
条件中的逻辑错误)
与
int i=0;
while (str[i]!='\0')
{
...
}
,因为:
i<=10
的测试对我来说似乎毫无意义且过于严格,if
和do..while
最好用一个while
来表达,并在开始时进行检查。答案 2 :(得分:0)
将您的函数原型更改为
void crypt(char *);
根据OP的评论:
在“jhrujh”之后,程序继续打印7-8个更多的有线字符。有任何想法吗?
while
循环中的逻辑错误。
void crypt(char str[])
{
int i=0;
while (str[i]!='\0')
{
if (str[i]<=119) {str[i] = str[i] + 3;}
else if (str[i]==120) {str[i]='a';}
else if (str[i]==121) {str[i]='b';}
else {str[i]='c';}
i++;
}
}