以下の例のように、文字列を読み取って2つに分割する方法を知る必要があります。
この文字列はファイル@amanda:@brunaにありますが、別々の単語として読み取ることはできず、それぞれが次のような2つの異なる変数に格納されます。
char userA[20];
char userB[20];
scanf("%s:%s", userA, userB);
手伝って頂けますか?
スキャンセットを使用して、最初%s
に行全体が消費され%s
ないようにします。これは、空白に遭遇したときにのみ消費を停止するためです。
if (scanf("%19[^:]:%19s", userA, userB) == 2)
{
/* 'userA' and 'userB' have been successfully assigned. */
}
ここで、は最大19文字を読み取りますが、コロンが検出されると停止%19[^:]
することを意味します。幅を指定すると、バッファオーバーランが発生します。行われた割り当ての数を返すの結果を常にチェックして、後続のコードが古い変数または初期化されていない変数を処理していないことを確認します。scanf()
char buf[60];
char userA[20];
char userB[20];
char *ptr;
scanf("%s", buf);
ptr = strchr(buf, ':');
if (ptr == NULL)
{
// whatever you want to do if there's no ':'
}
*ptr = 0;
strcpy(userA, buf);
strpcy(userB, ptr + 1);
を使用する必要はありませんscanf
。(実際、大学の授業以外では、scanf
ほとんど目的がありません)。データを読むだけです:
int main( void )
{
char line[ 80 ];
char *userA, *userB;
fgets( line, sizeof line, stdin ); /* Need to check that a full line was read */
userA = line;
userB = strchr( line, ':' ); /* Need to check that the input contains a colon */
*userB++ = '\0';