2014-01-11 2 views
-1

다음 함수는 최대 10 자의 문자열을 암호화합니다. 어떤 도움을 주시면 감사하겠습니다함수 호출의 유선 오류

***In function 'int main': 
[Error] invalid conversion from 'char*' to 'char' [-fpermissive] 
[Error] initializing argument 1 of 'void crypt(char)' [-fpermissive]*** 

:

는 대신, DevC는 ++ 날이 오류를 제공

#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++; 
    } 
} 

}. 미리 감사드립니다.

+0

@BLUEPIXY처럼 뭔가를 시도 할 수 있습니다. void crypt (char *);로 변경되었습니다. 하지만 while 루프가 ||와 맞다고 믿습니다. – Mechanic45

+0

두 번째 생각에 네가 두 계정에 다시 감사 드렸습니다. – Mechanic45

답변

0
영업 이익의 의견에 따라 경찰

void crypt(char *); 

에 함수 프로토 타입을 변경

:

right after "jhrujh" the program continues to print 7-8 more wired chars. any ideas?

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++; 
    } 
} 
+0

다시 한번 감사드립니다. 나는 그것을 바꿨고 예상 값인 "jhrujh"를 반환하지만 "jhrujh"직후에 프로그램은 7-8 개의 유선 문자를 계속 인쇄합니다. 어떤 아이디어? – Mechanic45

+0

'while'루프를 변경하십시오. – haccks

+0

@ Mechanic45; 편집을 참조하십시오. – haccks

1

당신과

합니다 (while 상태에서 논리적 오류를 포함하는)

int i=0; 

if (str[0]!='\0') 
{  
    do 
    { 
     ... 
    }while ((i<=10)||(str[i]=='\0')); 
} 

를 교체해야

int i=0; 

while (str[i]!='\0') 
{  
    ... 
} 

이유는

  • i<=10에 대한 테스트가 나에게 무의미하고 너무 제한적 보인다
  • 당신이 그것을 생략하면
  • ifdo..while 더 나은 시작에 확인하는 하나의 while로 표현 될 수있다.
+0

조언 해 주셔서 감사합니다. 끝났다. – Mechanic45

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'; } 
    } 
} 
+0

감사합니다. 잠시 동안 for 루프를 선호한다면 특별한 이유가 있을까요? – Mechanic45

+1

네, 좀 더 명확하고 직선적 인 것을 알았습니다. do 루프는 while 조건을 검사하기 전에 한 번 실행해야하므로, 약간의주의가 필요합니다. –

+0

오, 알았어, 고마워. – Mechanic45

관련 문제