2016-07-03 10 views
0

文字列の最大長が1000で、常にガイドラインに従いますint,int,char,intたとえば"12,6,@,3"それらを区切ってそれぞれの変数に格納する最も簡単な方法は何ですか?タイプ。私はisdigitなどのようなものが自分の知っているが、そのは本当に私が各intは可能性がどのように多くの文字を知らないこれらchar Sを解釈する必要がありますどのように多くのネストされたif年代を考えると気力をくじきます。私はプログラミングにとても慣れていないので、無礼にしてはいけません。ただ助けを求めています。私は文字列をCで解釈するのに助けが必要

+0

列がカンマ区切り値を持つ場合、解析する【はstrtok(http://www.tutorialspoint.com/c_standard_library/c_function_strtok.htm)を使用します。 – OldProgrammer

+0

入力文字列が無効かどうかを検出しますか? – chux

答えて

2

入力フォーマットは、そのように固定されている場合は、sscanfを使用することができます。

char inp[] = "12,6,@,3"; 
int a, b, d; 
char c; 
if (sscanf(inp, "%d,%d,%c,%d", &a, &b, &c, &d) == 4) { 
    printf("Received: %d %d %c %d", a, b, c, d); 
} 

Demo.

+0

これはsscanfが他の指定子でもうまく動作しますか、非常に有益でした。例えば ​​"intxint"のような12x32? –

+0

@AaronJamesRasmussenは絶対には、[ここ](http://en.cppreference.com/w/cpp/io/c/fscanf)記載のscanf関数によって受け入れすべての指定子で動作します。 – dasblinkenlight

+0

あなたが気にしなければ、私は半無関係な質問をしています。ユーザーが指定した名前のファイルを開く場合。そうするための良い方法は何ですか?だから私は持っている int boolean1 = 0; 一方(boolean1 == 0){ tempChar = GETCHAR()。 if(tempChar == EOF) break; else artName [counter] = tempChar; カウンタ++; } artNameはファイルの名前です。だからうまくいけば、そのファイルを開くにはどうすればいいですか?これまで私はFILE * fpointerを持っていました。 fpointer = fopen( "artName"、 "r");私はこの虚偽の入力をお詫びしたいと思います。 –

2

あなたの入力の本当に確信している場合は、あなただけ(sscanf関数を使用することができます):

#include <stdio.h> 
int main(){ 
    typedef struct Ds { 
     int i1; 
     int i2; 
     char c1; 
     int i3; 
    } Ds; 
    Ds ds; 
    sscanf("12,6,@,3","%d,%d,%c,%d",&ds.i1, &ds.i2, &ds.c1, &ds.i3); 
    printf("%d,%d,%c,%d\n",ds.i1,ds.i2,ds.c1,ds.i3); 
    return 0; 
} 
+0

ローカルの 'typedef'、本当ですか? – alk

+0

@alk:それは合法です。それが本当に有用かどうかは別の問題です。私はたぶんtypedefを使用しないでしょう。構造体を使用した場合、構造体の型とその型の変数を単純に定義します。 OTOH、私がそれをするとき、変数は通常構造体の配列であり、何らかのデータで初期化されます - 通常、型がどこにも必要でない何らかのテストケース用です。 –

関連する問題