从C中的String存储两个整数

时间:2011-10-05 21:32:57

标签: c string integer c-strings

我正在尝试编写一个从字符串中打印两个数字的程序。

例如,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;
        }       

    }   
}

到目前为止,我只能存储单个数字变量,并且由于某种原因打印了一个额外的行。

任何建议或意见将不胜感激。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

众多方法之一:找到逗号后,您可以将逗号更改为(char)0。然后你会有两个字符串,一个是line,另一个是line+comma_offset+1。两者都只是数字,可以传递给atoi

这个技巧起作用的原因是C字符串的实现方式 - 字符串的结尾是0.所以,你拿一个字符串:

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

并将逗号替换为null:

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

然后你有两个C字符串。这就是strtokstrtok_r的工作方式。

答案 2 :(得分: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上的部分,以便为您尝试扫描的值提供足够的存储空间。

答案 3 :(得分: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"); 

答案 4 :(得分: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;
              }
        }
    }
}