1

scanf()が入力を分離する方法を制御する方法はありますか?

scanf("%10s %10s", array1, array2);

上記は、スペースで区切って正常に機能します。しかし、別の分離信号を使用することはできますか?

入力をスペースではなくコンマでつなぎたい場合、これらのどちらも機能しないように見えるためです。

scanf("%10s,%10s", array1, array2);
scanf("%10s, %10s", array1, array2);

何を与える?私が読んでいる本は、任意の文字を使用してscanf()で入力を分離できると主張していますが、その方法を説明していません。さらに、代替文字が使用できる場合、単一の文字よりも広い基準も使用できますか? (つまり、値の型、ステートメントなど)

4

3 に答える 3

2

文字クラスの使用:

#include <stdio.h>

int main(int argc, const char **argv) {
  char s1[10], s2[10];
  const char *str = "word1,word2";
  sscanf(str, "%[^,],%s", s1, s2);
  printf("%s -- %s\n", s1, s2);
  return 0;
}

または、さらに具体的にすることもできます。

sscanf(str, "%[^,],%[^,]", s1, s2);

空白もキャプチャしますs2

複数の文字に分割するには、次を使用できますstrstr

#include <stdio.h>
#include <string.h>
int main(int argc, const char **argv) {
  const char *str = "word1fooword2fooword3", *foo = "foo", *ptr;
  const char *eofstr = str;
  for (ptr = str; eofstr; ptr = eofstr + strlen(foo)) {
    char word[10];
    eofstr = strstr(ptr, foo);
    if (eofstr) {
      size_t len = eofstr - ptr;
      strncpy(word, ptr, len);
      word[len] = 0;
      printf("%s\n", word);
    } else {
      strcpy(word, ptr);
      printf("%s\n", word);
    }   
  }
  return 0;
}
于 2013-01-07T00:52:11.617 に答える
1

実際には、scanf のデフォルトの区切り文字を変更する必要があります。そして、ここにあなたの質問に対する正確な答えがあります。

http://gpraveenkumar.wordpress.com/2009/06/10/how-to-use-scanf-to-read-string-with-space/

于 2013-01-07T00:38:19.473 に答える
1

rect 括弧の間で区切り文字を使用して文字区切り文字を「エスケープ」できますが、正直なところ、私はその解決策を使用したことがありません。代わりに、 fgetssscanfを使用できます。私の意見では、それを行うためのより「堅実な」方法です。fgets は stdin から読み取ることができ、sscanf は文字列内のコンマやその他の文字を探すことができます。また、fgets は ctrl+c で null を返し、sscanf は成功した読み取りの数を返します。お役に立てれば。

于 2013-01-07T00:45:04.647 に答える