2014-12-16 6 views
-1

온라인 자습서를 사용하여 배열의 문자를 섞어보기 위해 노력했습니다. 내가 사용한 튜토리얼은 정수를 사용하고 사용자 입력을 포함하지 않았지만 내가 그것을 복제하고 복제 할 때 내가 아래에 만든 코드에서 무엇을하고 싶은지를 바꿀 때 작동하지 않는다.C 프로그래밍의 배열에서 문자 섞기

오류 메시지가 전혀 없습니다. 프로그램을 실행하면 단어를 입력하라는 메시지 만 표시되고 끝납니다.

코드에서 원하는 내용을 이해할 수없는 경우 사용자가 단어를 삽입 한 다음 끝에 '섞은 단어'를 인쇄하고 싶습니다. (예 : Hello> elHol)

나는 여전히 매우 새로운 프로그래머이며 주제에 대해 매우 어려움을 겪고 있으므로, 내가 작성한 '바보 같은 실수'를 이해하십시오.

미리 도움을 청하십시오! 코드에

#include <stdio.h> 
#include <time.h> 

int main() 
{ 
    char word[15]; 
    int i,length,j, temp; 

    srand(time(NULL)); 

    printf("Insert word\n"); 
    scanf("%s", word); 

    for(i=0; word[i] != '\0';) 
    { 
     i = i + 1; 
    } 

    i = length; 

    for(i = 0; i < length; i++) 
    { 
     j = (rand()%length); 
     temp = word[i]; 
     word[i] = word[j]; 
     word[j] = temp; 
    } 

    for(i=0; i<length; i++) 
    { 
     printf("%c", word[i]); 
    } 
} 
+1

다음 줄을 수정하십시오. i = length; –

답변

1

몇 가지 변경 :

가 문자로 temp합니다

char temp; 
당신이 당신이 길이로 길이 이후를 할당하는 다른 방법을하고 length i

지정 이 값을 사용하여 다른 변수에 할당하면 정의되지 않은 동작이 발생합니다.

length = i; 
+0

정말 고마워요! – Casey

+0

@Casey는 '길이'지정을 수정하여 이제 작동합니까? – chouaib

+0

@chouaib이 후에도 어떻게 작동하지 않을 것이라고 생각하니? – Gopi

1

환영합니다. 귀하의 문제에 대한 다른 엔지니어의 솔루션 외에도 임시 변수를 사용하지 않도록 코드를 수정했습니다. [새로운 프로그래머에 대해 언급 한 이후로 일부 확장에 도움이 될 것이라고 생각했습니다. ;)]

아래의 소스 코드를 살펴보십시오.

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 

int main() 
{ 
    char word[15]; 
    int i,length,j, temp; 

    srand(time(NULL)); 

    printf("Insert word\n"); 
    scanf("%s", word); 

    for(length=0; word[length++] != '\0';); 
    for(i = 0; i < length; i++) 
    { 
     j = (rand()%length); 
     word[i] = word[i]^word[j]; 
     word[j] = word[i]^word[j]; 
     word[i] = word[i]^word[j]; 
    } 

    for(i=0; i<length; i++) 
    { 
     printf("%c", word[i]); 
    } 
} 
+0

'^'기호를 이해할 수 없습니다. 무슨 뜻이에요? – Casey

+0

XOR 연산자입니다. http://en.wikipedia.org/wiki/Bitwise_operations_in_C – Whoami