2011-10-05 1 views
0

문자열에서 두 개의 숫자를 인쇄하는 프로그램을 작성하려고합니다.C에서 문자열의 두 정수를 저장하십시오

예 : string = '20, 66 '두 문자열을'20 '과'66 '을 별도의 변수로 저장할 수 있도록이 문자열을 분리하려고합니다. 여기

내가 일하고 코드입니다 :
#include <stdio.h> 

char line[80]; 

int main(void) 
{ 
    // Variables 
    int start_number, end_number; 
    int i, j; 

    while(1) 
    { 
     printf("Enter a number: "); 
     fgets(line, sizeof(line), stdin); 

     // How to find Comma 
     for(i=0; i < strlen(line); i++) 
     { 
      if(line[i]==',') break; 
     } 

     // How to find two numbers 
     for(j = 0; j < i; j++) 
     { 
      printf("1: %c\n", line[j]);   
     } 

     for(j = i + 1; j < strlen(line); j++) 
     { 
      printf("2: %c\n", line[j]); 
     } 

     if (strcmp(line, "quit\n") == 0) 
     { 
      printf("Now terminating program..."); 
      break; 
     }  

    } 
} 

는 지금까지 내가 한 자리 변수를 저장하는 데에만 수 있어요 어떤 이유로 별도의 라인을 인쇄합니다.

모든 제안이나 조언을 부탁드립니다.

+4

이 인트로 레벨 코스 숙제 문제 같은 의심 소리 ...... –

답변

4

매우 간단합니다 : 많은 방법의

const char *text = "20,30"; 
const char *rest = 0; 
int first = strtol(text, &rest, 10); // input, pointer to remaining string, base (10 = decimal) 
rest += 1; // skip the comma; this is error prone in case there are spaces! 
int second = strtol(rest, NULL, 10); // not interested in remaining string, so pass NULL this time 
2

하나 : 당신이 쉼표를 찾으면, 당신은 (char)0에 쉼표를 변경할 수 있습니다. 그런 다음 두 개의 문자열을 갖게됩니다. 하나는 line이고 다른 하나는 line+comma_offset+1입니다. 두 숫자는 숫자 일 뿐이므로 atoi으로 전달할 수 있습니다.

'1' '2' ',' '3' '4' 0x00 
| 
line 

및 null로 쉼표를 대체 :

C 문자열이 구현 - 더되는 문자열의 끝을 길에 0이 그래서, 당신은 문자열을 인해

이 트릭 작동

'1' '2' 0x00 '3' '4' 0x00 
|    | 
line   str_2 

두 개의 C 문자열이 있습니다. 이것은 strtokstrtok_r이 작동하는 방식입니다.

2

scanf과 그 친척으로 봐 :

#include <stdio.h> 

int main() { 
    int x, y; 
    sscanf("22,33", "%d,%d", &x, &y); 
    printf("Scanned vars: %i %i\n", x, y); 
} 
tmp]$ ./a.out 
Scanned vars: 22 33 

너무 읽고 당신이 검색하려는 값에 대한 충분한 저장이 그래서 security에 섹션을 이해해야합니다 보안 취약성을 유발하는 것이 가능 .

+0

을 그것에게 쉬운 방법을 이렇게! – derobert

0

아마 "1 :"및/또는 NEWLINE (​​"\ n")을 for 루프에 인쇄하고 싶지 않을 것입니다. 이 변경이에

for(j = 0; j < i; j++) 
{ 
    printf("1: %c\n", line[j]); 
} 

을 :

printf("1: "); 
for(j = 0; j < i; j++) 
{ 
    printf("%c", line[j]); 
} 
printf("\n"); 
0
#include <stdio.h> 

char line[80]; 

int main(void) 
{ 
    // Variables 
    int start_number, end_number; 
    int i, j; 

    while(1) 
    { 
     printf("Enter a number: "); 
     fgets(line, sizeof(line), stdin); 
     for(i=0; i < strlen(line); i++) 
     { 
       char num[]; 
      if(line[i]!=','){ 
       num[j++] = line[i]; 
      } 
      else{ 
       for(int x =0 x<strlen(num); x++) 
        printf("Number :%c", num[x]); 
       j=0; 
       } 
     } 
    } 
}