2009-10-30 2 views
0

x 번호를 사용할 함수를 코딩해야합니다. (x는 인수로 함수로 읽습니다.) 숫자는 임의의 수의 공백과 개행으로 앞뒤로 구분할 수 있으며 마지막 숫자를 입력하면 개행 문자가 스캔을 끝냅니다. 나는 캐릭터의 테이크 (take)에 문자열을 사용하고 숫자가없는 문자는 무시하는 것에 대해 생각했다. 숫자 문자가 입력되면 문자열과 다음의 숫자 문자로 읽혀집니다. 숫자 다음에 공백이나 개행 문자가 입력되면 문자열의 숫자를 배열에 입력해야합니다.문자열을 사용하여 숫자 읽기

그래서 문자열에 { '1', '3', '2}}이 있으면 배열의 셀에'132 '의 값을 배치하고 싶습니다.

숫자가 배열에 놓일 때 카운터에 카운터를 설정하고 필요한 숫자에 도달하면 함수가 반환됩니다.

는 여기에 내가 지금까지이 작업은 다음과 같습니다

void read_vector(int* v, int n) 
    { 
     int value, i = 0, j = 0, k; 
     char num, str[9]; 

     do 
     { 
      num = getchar(); 

      if (num > 47 && num < 58) 
      { 
       while (i < 10) 
       {  
        str[i] = num; 
        i++; 
        num = getchar(); 

        if (i = 9 || num < 47 || num > 58) 
        { 
         str[i] = '\0' 
         j++; 

         for(k = 1; k <= strlen(str); k++) 
         { 
          value += str[k - 1] * pow(10, (strlen(str) - k)); 
         } 

         v[j] = value 

         if(j = n) 
          return; 
        } 
       } 
      } 
     } 

     while (1); 
    } 

감사

+0

: 예를 들어, 양의 정수만? –

+0

당장은 그렇습니다. 나는 양의 정수만 가정 할 것이다. 또한, 이것을하는 더 간단한 방법이 있다면, 나는 열려 있습니다. – Kyle

+2

및 isdigit()을 사용하십시오. 'num> 47 & num <58'을 사용하면 0 점을 얻으실 수 있습니다! –

답변

2

나는 당신의 입력이 표시되는 방법에 따라는 scanf 가족의 일원을 사용합니다. fscanf()는 여러분이 요구하는 것을 꽤 많이합니다. 모든

+0

fscanf()에 대해 조금 읽은 후에는 첫 번째 인수가 텍스트가 입력되는 스트림임을 알 수 있습니다. 나는 이것에 익숙하지 않다. 숫자는 여러 가지 방법으로 입력되므로 하나를 지정할 수 있을지 확실하지 않습니다. 나는 scanf가 첫 번째 인자로 stdin을 가진 fscanf와 같다는 것을 알았다. 사과드립니다. 나는 이것에 상당히 새롭다. stdin을 설명 할 수 있습니까? 제 생각에 scanf는 새 줄이 나타날 때까지 계속 찾습니다. n 개의 숫자가 입력 될 때까지 계속 찾고 싶습니다. – Kyle

+0

가족에는 stdin에서 읽는 scanf, 텍스트 파일에서 읽는 fscanf 및 문자열에서 "읽는"sscanf의 세 가지 기능이 있습니다. 형식 문자열을 사용하여 입력 내용을 설명합니다. 임의의 공백을 건너 뛰고 형식 문자열을 기반으로 변수를 지정합니다. 명확하지 않은 점은 세부 사항없이 "숫자가 여러 방법으로 입력 될 것"이라고 말하기 때문에 이것이 충분히 유연 할 지 여부입니다. Kernigan과 Richie의 "The C Programming Language"와 같은 훌륭한 C 매뉴얼을 사용하거나 온라인을 둘러보십시오. 행운을 비네. –

0

첫째, 당신은 할 수 귀하의 IFS 실 거예요 당신이 그 (것)들을

을 기대 일을 지금 comparison and logical operators in C

을 확인하지 C.에서 비교 연산자를 사용하는 방법에 대한 약간의 혼동이 될 것 같다 nitpicky 또는 무엇이든, 그러나 귀하의 첫 번째 동안 루프는 루프에 대한 귀하의 요구에 더 잘 어울릴 것입니다. 어쨌든 카운터가 필요하기 때문입니다.

+0

예, "if (i == 9 || num < 47 || num > 58)" – Kyle

1

난 당신이 토큰으로 문자열을 분할 strtok()를 사용할 것을 권하고, 숫자로 텍스트를 변환하기 위해 사용 atoi(), atol(), 또는 atof() 것입니다. (. 실제로이 예제를 테스트하지, 그것은 정확성을 확인하는 데 실패)

void 
read_nums(int count, double *buffer, char *str) 
{ 
    int i; 
    char *str2; 

    // Read the first token 
    str2 = strtok(srt, " \n\t\r"); 

    for (i = 0; i < count;) { 
     if (*str2) 
      // Convert and store the number 
      buffer[i++] = atof(str2); 

     // Read the next token 
     str2 = strtok(NULL, " \n\t\r"); 
    } 
} 
당신이 그것을 구현하는 방법을 정확하게 볼 수 이러한 기능에 대한 몇 가지 좋은 문서를 찾아 볼 것을 권 해드립니다 것이다

관련 문제