0

文字列から 2 つの数値を出力するプログラムを作成しようとしています。

たとえば、string = '20,66' '20' と '66' を 2 つの別々の変数に格納できるように、この文字列を分割しようとしています。

ここに私が取り組んでいるコードがあります:

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

    }   
}

これまでのところ、1 桁の変数しか格納できず、何らかの理由で余分な行が出力されます。

提案やアドバイスをいただければ幸いです。

4

5 に答える 5

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
于 2011-10-05T21:38:17.050 に答える
2

多くのアプローチの 1 つ: コンマが見つかったら、コンマを に変更できます(char)0。次に、2 つの文字列ができます。1 つはline、もう 1 つは になりますline+comma_offset+1。どちらも単なる数字であり、 に渡すことができますatoi

このトリックは、C 文字列の実装方法 (文字列の末尾が 0) により機能します。つまり、文字列を取得します。

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

コンマをヌルに置き換えます。

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

次に、2 つの C 文字列があります。これがどのようstrtokに機能するかstrtok_rです。

于 2011-10-05T21:38:17.227 に答える
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

セキュリティの脆弱性が発生する可能性があるため、セキュリティに関するセクションを読んで理解して、スキャンしようとしている値に十分なストレージを確保してください。

于 2011-10-05T21:38:43.967 に答える
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"); 
于 2011-10-05T21:42:11.390 に答える
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;
              }
        }
    }
}
于 2011-10-05T21:46:08.627 に答える