2

たとえば、次のような2つの名前を読み取る必要があるとし[name name]\nます[name name]\n。fgets()とfscanfですが、誰かがそれらの使用方法の例を教えてくれませんか?よろしくお願いします。[name name name]\n[name name name...]\n

char name1[20];
char name2[20];
for(int i=0; i < numberOfRow ; i++){
  scanf(" %s %s", name1, name2);
}

さて、要素が2つしかないことを確認する方法を見つけましたが、それらを変数に戻す方法がわかりません...

char str[50];
int i;
int count = 0;
fgets(str, 50, stdin);

i = strlen(str)-1;
for(int x=0; x < i ;x++){
  if(isspace(str[x]))
    count++;
}
if(counter > 1){
  printf("Error: More than 2 elements.\n");
}else if{
//How do i place those two element back into the variable ?
char name1[20];
char name2[20];

}

4

3 に答える 3

0

標準入力からの場合、これを停止する方法はありません。ユーザーは好きなものを入力できます。最初にすべての入力を読み込み、次に結果を確認することをお勧めします。

于 2011-05-12T11:30:12.660 に答える
0

fgetsを使用してすべての行を読み取り、結果を解析できます。例えば:

char name[256];
for (int i = 0; i < numberOfRow; i++)
{
   if (fgets(name, 256, stdin) != NULL)
   {
      // Parse string
   }
}

Fgetsは、Enterキーが押されるまで行を読み取ります。ここで、この文字列を解析する必要があります。ユーザーが間違った入力("aaa"または"aaa bbb ccc"として)を入力した場合はエラーを返し、それ以外の場合( "aaa bbb")は文字列を分割し、name1および"bbb"として"aaa"を使用します。 name2として

于 2011-05-12T11:31:57.600 に答える
0

strtok(string.h)を使用できます。この関数はソース文字列を変更するので注意してください(前に文字列をコピーできます)。

strtokの例:

char* word;

// First word:
word = strtok(str, " "); // space as the delimiter
strncpy(name1, word, sizeof(name1) - 1); 
name1[sizeof(name1) - 1] = 0;  // end of word, in case the word size is > sizeof(name1)    

// Second word
word = strtok (NULL, " ");
strncpy(name2, word, sizeof(name2) - 1);
name2[sizeof(name2) - 1] = 0;

また、私はあなたがチェックする必要があると思います

于 2011-05-12T13:50:05.793 に答える