1時間ごとに更新!Amazon.co.jpで今売れている本トップ100   掲示板ランキング



掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

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

掲示板1

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

No.6180

『c = getchar(); が実行されず、次のプログラムへ進んでしまいます。』
投稿者---かえる(2006/07/19 17:36:39)


下記のプログラムでoo関数の"c = getchar()"が実行されません。
どなたかご教授お願い致します。

OS  :WindowsXP
コンパイラ:Borland C++ Compiler 5.5


実行後の動作
**************
プログラム選択:2
  ↓↓
修正箇所入力:1 1
↓↓
一文字入力:
  ↓↓
プログラム選択:(入力待ち)
**************
※一文字入力が行ってないのに次に進んでしまいます。


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void hint(void);
void word_input(char *[]);
void word_default(void);
char *oo(char *,int);

/*************************************************/
int main(void)
{


    char *input[] = {"|■|6 |10|13|  |17|21|24|■|",
                 "|1 |  |  |  |■|18|  |  |27|",       
                 "|2 |  |■|14|16|  |  |■|  |",
                 "|  |■|11|  |  |  |■|25|  |",
                 "|3 |7 |  |■|  |■|22|  |  |",
                 "|  |6 |■|15|  |19|  |■|  |",
                 "|  |■|12|  |  |17|■|26|  |",
                 "|5 |8 |  |  |■|20|23|  |  |",
                 "|■|9 |  |  |  |  |  |  |■|"};
    int i, x;

//  word_default();

    printf("プログラム選択:");
    scanf("%d", &x);


    while(x != 3){
        if(x == 1)
            hint();

        else if(x == 2)
            word_input(input);
        
        else if(x == 3)
            break;

        else if(x == 4)
            word_default();

        else
            printf("再度入力し直しください\n");

        printf("プログラム選択:");
        scanf("%d", &x);
    }

    return 0;
}

void hint(void)
{
    /*省略*/
}


void word_input(char *input[])
{
    int x,y;
    char m,n;
    char s[3];

    printf("修正箇所入力:");
    scanf("%d %d", &x, &y);


    //2バイト文字 ■ か判断。
    if( ((unsigned char)*(input[x] + 3 * y + 1) == 0x81) && ((unsigned char)*(input[x] + 3 * y + 2) == 0xA1))
        printf("\n■には入力できません。\n\n");

    else {
        printf("一文字入力:");
        oo(s, 3);
    }

    printf("\n");

}

void word_default(void)
{
    /*省略*/
}


char *oo(char *s, int size)
{
    char c;

    c = getchar();
    /*  c = getchar(); を消して
        scanf("%c",&c); なら実行可能*/

    /*省略*/
    return s;
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re: 『c = getchar(); が実行されず、次のプログラムへ進んでしまいます。』 6181 shu 2006/07/19 18:05:49
<子記事> Re: 『c = getchar(); が実行されず、次のプログラムへ進んでしまいます。』 6182 REE 2006/07/19 18:13:02
<子記事> Re: 『c = getchar(); が実行されず、次のプログラムへ進んでしまいます。』 6184 ruby 2006/07/19 21:37:09


No.6181

Re: 『c = getchar(); が実行されず、次のプログラムへ進んでしまいます。』
投稿者---shu(2006/07/19 18:05:49)


charでは、getchar()の思いを受け止められない。


この投稿にコメントする

削除パスワード

No.6182

Re: 『c = getchar(); が実行されず、次のプログラムへ進んでしまいます。』
投稿者---REE(2006/07/19 18:13:02)


>下記のプログラムでoo関数の"c = getchar()"が実行されません。
>どなたかご教授お願い致します。

実行はされています。
その直前のscanfの影響です。

以下を参考にどうぞ
http://www9.plala.or.jp/sgwr-t/c/sec05.html#s5-4


この投稿にコメントする

削除パスワード

No.6184

Re: 『c = getchar(); が実行されず、次のプログラムへ進んでしまいます。』
投稿者---ruby(2006/07/19 21:37:09)


主要な指摘は他の方からの回答のとおりです。
で、私からは補足的な指摘をば。

1)コンパイル時の警告に目を向けましょう。
特に、shuさんからのご指摘は、警告メッセージに出ているはずです。

2)main関数でのwhile文によるループは、switch〜caseを使って
書く方がより自然でありましょう。



この投稿にコメントする

削除パスワード

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





掲示板提供:(有)リアル・インテグリティ