2011-10-05 56 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

這招的作品,由於方式的C字符串實現,該字符串的結尾是0,所以,你有一個字符串:

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

,並用空替換逗號:

'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

也許你不想在for循環中打印出「1:」和/或NEWLINE(「\ n」)。更改此:

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