2014-09-17 6 views
0

현재 목록을 알파벳순으로 표시하려고 시도하고 있습니다. 정렬 할 단어 수가 들어있는 줄을 사용자가 입력하려고합니다. 다음 줄마다 새로운 단어를 입력하게됩니다. 단어에는 공백이 포함되지 않으며 라인 리턴으로 끝납니다. scanf 또는 fgets을 사용하여 모든 것을 읽을 수있는 쉬운 방법은 알고 있지만 내 마이크로 프로세서는 이러한 기능을 처리하여 getchar()을 사용할 수 없습니다. 현재 정렬 된 목록을 인쇄 할 때 그냥 쓰레기를 인쇄합니다. 내 코드에 문제가있는 것처럼 느껴지지만 프로그래밍에 익숙하지 않고 알아낼 수 없습니다. 어떤 도움을 주셔서 감사합니다. ,getchar을 사용하여 목록을 알파벳순으로 배열하는 방법

if (ch == 0x0D) 
{ 
    string[i][j] = '\0'; 
    printf("\n\r"); 
} 

둘째, 당신은 한 번에 문자를 읽고됩니다. 먼저

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

    int main() 
    { 
     int i, j; 
     char string[10][20], temp[20]; 
     int num; 

     while(1) 
     { 
      char ch = getchar(); 
      if(ch == 0) 
       continue; 
      if(ch <= 0x39 && ch >= 0x30) 
      { 
       putchar(ch); 
       num = ch - 0x30; 
      } 
      if(ch == 0x0D) 
       printf("\n\r"); 
      if (ch <= 0x7A && ch >= 0x61) 
      { 
       putchar(ch); 
       for(i=0; i<=num; i++) 
       { 
        for(j=0; j<=20; j++) 
         string[i][j] = ch; 
       } 
      } 
      if(ch== 0x20) 
       break; 
     } 
     for (i = 0; i < num - 1 ; i++) 
      { 
       for (j = i + 1; j < num; j++) 
       { 
        if (strcmp(string[i], string[j]) > 0) 
        { 
         strcpy(temp, string[i]); 
         strcpy(string[i], string[j]); 
         strcpy(string[j], temp); 
        } 
       } 
      } 
      printf("\nSorted Names\n"); 
      for (i = 0; i < num; i++) 
      { 
       printf("%s\n", string[i]); 
      } 
      return 0; 
    } 
+2

'j <= 20'이고 친구들은'j <20'이어야합니다. 끝이 1 씩 벗어나는 것을 피하십시오. 그리고 당신은 당신의 문자열을 널 종료하지 않고 있습니다. 첫 번째'for' 루프는'char' 배열을 모두 같은 문자로 채 웁니다. 어떤 종류의 마이크로 프로세서가'scanf()'와'fgets()'를 "처리 할 수 ​​없습니까?" –

+0

매우 작은 하나 – pm100

+0

C 런타임이 없기 때문에 작지는 않습니다. * 아무것도 넣지 않았을 정도로 작습니다 *. 얼마나 이상합니다. 어쨌든이 마이크로 프로세서는 무엇입니까? – WhozCraig

답변

2

, 당신은 그래서 당신은에 반환 수표를 변경해야합니다으로 당신이 읽은 문자열을 NULL로 종료해야합니다 그런 다음 각 문자에 대해 for 루프를 수행합니다. 이것은 완전히 잘못된 것입니다. while 루프 내에서 i와 j를 추적하고 각 캐릭터를 올바른 위치에 놓아야합니다. 꽤 간단하기 때문에 이것을 쓰지 않을 것입니다 : 'a'와 'z'사이의 문자를 받았을 때 루프를위한 double을 없애고 문자열 [i] [j] = ch를 설정 한 다음 증가 j. j가 20보다 작은 지 먼저 확인하십시오.

그렇다면 0x0D 문자가 나타날 때마다 i를 증가시키고 i> = num 일 때 while 루프를 종료하십시오.

또한 올바른 순서로 데이터를 입력하는 사용자를 확인할 수 있도록 단어를 읽는 전에 별도의 루프에서 num을 읽는 것이 좋습니다. 사용자가 숫자를 입력 할 때까지 단어 읽기를 시작하지 않으므로 읽어야 할 숫자를 알 수 있습니다.

+0

감사합니다. 매우 도움이되며 이해하는 것이 매우 분명합니다.나는 이것을 매우 고맙게 생각한다. – user3259141

+1

문자열을'NULL'으로 끝내지 않고 '0'또는' '\ 0'을 사용하여 문자열을 종료합니다. 'NULL'은 포인터입니다. –

+0

이전 답변을 생각하고 있었는데 문자열에 대한 포인터에 대해 이야기하고 있던 곳을보고 있었는데 실수로 입력 한 것입니다. – JonS