【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.23348

一行に複数のデータを入力する方法
投稿者---あきき(2005/09/28 00:18:53)


一行にデータとデータの間にタブを入れ複数のデータを入れたいのですがうまくいきません。以下のコーディングではやっぱりだめなんでしょうか?

#include <stdio.h>

int main( void )
{
    int a,b,c;
    scanf("%d",&a);
    printf("\t");

    scanf("%d",&b);
    printf("\t");

    scanf("%d",&c);
    printf("\t");

    printf("%d\t%d\t%d\n",a,b,c);
    return 0;
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:一行に複数のデータを入力する方法 23349 nop 2005/09/28 00:27:17
<子記事> Re:一行に複数のデータを入力する方法 23350 まきじ 2005/09/28 00:33:25


No.23349

Re:一行に複数のデータを入力する方法
投稿者---nop(2005/09/28 00:27:17)


>一行にデータとデータの間にタブを入れ複数のデータを入れたいのですがうまくいきません。
>以下のコーディングではやっぱりだめなんでしょうか?

どういう動作を期待しているのか、
もっと具体的に書いてみて下さい。


この投稿にコメントする

削除パスワード

No.23381

Re:一行に複数のデータを入力する方法
投稿者---あきき(2005/09/28 20:22:14)


一行に複数のデータを入力したいというのに、何を勘違いしてかscanf関数を使用していました。
一行入力というなら、gets関数かfgets関数をべきかと。しかし、当サイトの過去ログでgets関数は使用しないほうがいい書いていたと思います。私としても、fgets関数、sscanf関数を使用する、一行複数データ入力を考えています。

入力の仕方として
1.入力項目の見出しを表示(入力項目は複数)。(改行)
2.入力項目の下にデータを入力。
3.データを構造体のメンバーに代入。

例)社員番号 名前 郵便番号 住所   電話番号
  xxxxxxx ○○○ 999-9999 xxxx  xxx-xxx-xxxx

なお今回はデータとデータの間に、\tを入れるということでしたが、連続した半角ブランクでもかまいません。


この投稿にコメントする

削除パスワード

No.23387

Re:一行に複数のデータを入力する方法
投稿者---まきじ(2005/09/28 23:44:38)


>1.入力項目の見出しを表示(入力項目は複数)。(改行)
>2.入力項目の下にデータを入力。
>3.データを構造体のメンバーに代入。

printf() で

>社員番号 名前 郵便番号 住所   電話番号

を出力後、fgets() で

>xxxxxxx ○○○ 999-9999 xxxx  xxx-xxx-xxxx

と入力を促し、strtok() か sscanf() で \t で区切り
構造体のメンバに代入すればどうでしょうか?

printf("社員番号\t名前\t郵便番号\t住所\t電話番号");
fgets(record,256,stdin);


この投稿にコメントする

削除パスワード

No.23410

Re:一行に複数のデータを入力する方法
投稿者---あきき(2005/09/29 22:03:27)


>>xxxxxxx ○○○ 999-9999 xxxx  xxx-xxx-xxxx
>
>sscanf() で \t で区切り
>構造体のメンバに代入すればどうでしょうか?
>fgets(record,256,stdin);

sscanf()関数で\tで区切りとはどういう意味なんでしょうか?
その機能についてのサイトがありましたら是非教えてください



この投稿にコメントする

削除パスワード

No.23411

Re:一行に複数のデータを入力する方法
投稿者---まきじ(2005/09/29 22:22:11)


>sscanf()関数で\tで区切りとはどういう意味なんでしょうか?

sscanf(buf,"%s %s %s %s %s",id,name,zip,adr,tel);

23350 と同様に %s と %s の間は \t にしなくても
スペースでも OK です。

>その機能についてのサイトがありましたら是非教えてください

MSDN http://msdn.microsoft.com/library/ja/


この投稿にコメントする

削除パスワード

No.23415

Re:一行に複数のデータを入力する方法
投稿者---あきき(2005/09/29 23:48:13)


まきじさん、返信ありがとうございます
やっぱり、


>printf() 関数で社員番号 名前 郵便番号 住所   電話番号
を出力後、fgets() で

>xxxxxxx ○○○ 999-9999 xxxx  xxx-xxx-xxxx

を入力した後、sscanf関数を使用したほうが無難ですね。
私が望むべき事は当面の課題とします。


この投稿にコメントする

削除パスワード

No.23388

Re:一行に複数のデータを入力する方法
投稿者---あきき(2005/09/28 23:49:28)


>入力の仕方として
>1.入力項目の見出しを表示(入力項目は複数)。(改行)
>2.入力項目の下にデータを入力。
>3.データを構造体のメンバーに代入。
>
>例)社員番号 名前 郵便番号 住所   電話番号
>  xxxxxxx ○○○ 999-9999 xxxx  xxx-xxx-xxxx
>
上記の場合だと社員番号を入力した後、名前のデータ入力欄にカーソルをスキップさせるにはどの様な関数を用いたらいいでしょうか?


この投稿にコメントする

削除パスワード

No.23389

Re:一行に複数のデータを入力する方法
投稿者---まきじ(2005/09/29 00:07:20)


>上記の場合だと社員番号を入力した後、名前のデータ入力欄にカーソルをスキップさせるにはどの様な関数を用いたらいいでしょうか?

スキップは無理かと、、、

スキップじゃなく、- と入力されたらその項目のデータは無しにするとか。
一つ一つ入力させるとか。


この投稿にコメントする

削除パスワード

No.23390

Re:一行に複数のデータを入力する方法
投稿者---あきき(2005/09/29 00:16:11)


>スキップじゃなく、- と入力されたらその項目のデータは無しにするとか。
>一つ一つ入力させるとか。

すみません説明不足でした。例えば、社員番号・名前とデータを打ち込むとします。社員番号が6桁あって、123456と入力したら自動的にカーソルが名前の欄に移動するという意味です。


この投稿にコメントする

削除パスワード

No.23392

Re:一行に複数のデータを入力する方法
投稿者---まきじ(2005/09/29 00:24:09)


>社員番号が6桁あって、123456と入力したら自動的にカーソルが名前の欄に移動するという意味です。

「名前の欄」とはどっからどこまで ですか?
fgets() などで、入力待ちの間は、他の処理はできません。

その様なことが実現できる関数を自作してください。


この投稿にコメントする

削除パスワード

No.23393

Re:一行に複数のデータを入力する方法
投稿者---RiSK(2005/09/29 00:37:34)


>社員番号が6桁あって、123456と入力したら自動的にカーソルが名前の欄に移動するという意味です。

処理系に依存します。環境を書きましょう。

C言語のstdinストリームは行バッファリングですから,
「6文字入力したら」ということは出来ません。
また,C言語にカーソルという概念はありません。

Windowsならconio.hあたり_getchとかの出番かも。MSDNを調べましょう。


この投稿にコメントする

削除パスワード

No.23391

Re:一行に複数のデータを入力する方法
投稿者---shu(2005/09/29 00:16:34)


>上記の場合だと社員番号を入力した後、名前のデータ入力欄にカーソルをスキップさせるにはどの様な関数を用いたらいいでしょうか?

面倒な割に、あまり意味がないので、やめたほうが良い。


この投稿にコメントする

削除パスワード

No.23350

Re:一行に複数のデータを入力する方法
投稿者---まきじ(2005/09/28 00:33:25)


>一行にデータとデータの間にタブを入れ複数のデータを入れたいのですがうまくいきません。

scanf("%d\t%d\t%d",&a,&b,&c);


この投稿にコメントする

削除パスワード

No.23352

Re:一行に複数のデータを入力する方法
投稿者---かずま(2005/09/28 02:59:51)


> scanf("%d\t%d\t%d",&a,&b,&c);

これは、scanf("%d %d %d", &a, &b, &c); と書いても、
scanf("%d%d%d", &a, &b, &c); と書いても同じ動作をするのに、
なぜ、わざわざ "\t" と書くのですか?


この投稿にコメントする

削除パスワード

No.23364

Re:一行に複数のデータを入力する方法
投稿者---まきじ(2005/09/28 14:13:34)


>これは、scanf("%d %d %d", &a, &b, &c); と書いても、
>scanf("%d%d%d", &a, &b, &c); と書いても同じ動作をするのに、

確かに。

>なぜ、わざわざ "\t" と書くのですか?

「タブを入れ複数のデータを入れたい」との質問でしたので
はずみで、\t と記述してしまっただけです。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧