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

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

 詳しくはこちら



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

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


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

No.18856

scanfがうまく動きません
投稿者---かわず(2004/12/22 22:18:08)


Cの勉強を始めて2週間のものなのですが、作ってみたプログラムがうまく動きません。コンパイラのエラーはなく、main関数内一番最初のfor文で使っているのsacanf("%d" ,&kinmu[i].no)が二回目以降のfor文の処理時点で作動しません。解決方法がわかりません。どなたか分かる方以内でしょうか?宜しくお願いします。作っているのは勤務表を作成するプログラムです。ソースは下記の通りです。
#include <stdio.h>

struct syain{
    
    int no;
    
    char name[40];
    
    int kaisuu1;
    
    int kaisuu2;
    
    int kaisuu3;
    
    int kaisuu4;
    
    int kaisuu5;
};

main()

{
    
    struct syain kinmu[3];
    
    int i;
    int j;
    int h=0,n=0,o=0,y=0,k=0;
    
    char work[3][10];
    
    char ans;
    int t;
    
    for(i=0; i<3; i++){
            
            printf("社員番号は?\n");
            scanf("%d",&kinmu[i]);
            printf("名前は?");
            scanf("%s",kinmu[i].name);
            printf("勤務(早番:1 日勤:2 遅番:3 夜勤:4 休日:5)は?\n");
            
            for(j=0; j<10; j++){
                printf("%d日は?\n" ,j+1);
                scanf("%c\n" ,&work[i][j]);
                if(work[i][j] == '1'){
                    kinmu[i].kaisuu1=h++;
                }
                
                if(work[i][j] == '2'){
                    kinmu[i].kaisuu2=n++;
                }
                
                if(work[i][j] == '3'){
                    kinmu[i].kaisuu3=o++;
                }
                
                if(work[i][j] == '4'){
                    kinmu[i].kaisuu4=y++;
                }
            
                if(work[i][j] == '5'){
                    kinmu[i].kaisuu5=k++;
                }
            }
        }
    
    /*printf("これでいいですか(YES:y NO:n)");
    
    scanf("%c" ,ans);
    
    if(ans == 'y'){
        
        break;
        
    }*/
    
    
    printf("+------------------------------------------------------------------------------------------------------+\n");
    
    printf("|  NO  |   名前  | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | 10 |  早番 | 日勤 | 遅番 | 夜勤 | 休日 |\n");
    
    for (i=0; i<3; i++){
            printf("|  %d   |   %s   |" ,kinmu[i].no,kinmu[i].name);
            
        for(j=0; j<10; j++){
            printf(" %c  |" ,work[i][j]);
        }
        
        printf("  %d回  |  %d回  |  %d回  |  %d回  |  %d回  |\n" ,kinmu[i].kaisuu1,kinmu[i].kaisuu2,kinmu[i].kaisuu3,kinmu[i].kaisuu4,kinmu[i].kaisuu5);
        printf("\n");
    }
    
    printf("+------------------------------------------------------------------------------------------------------+\n");
    
    return 0;

}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:scanfがうまく動きません 18857 かわず 2004/12/22 22:22:15


No.18857

Re:scanfがうまく動きません
投稿者---かわず(2004/12/22 22:22:15)


>Cの勉強を始めて2週間のものなのですが、作ってみたプログラムがうまく動きません。コンパイラのエラーはなく、main関数内一番最初のfor文で使っているのsacanf("%d" ,&kinmu[i].no)が二回目以降のfor文の処理時点で作動しません。解決方法がわかりません。どなたか分かる方以内でしょうか?宜しくお願いします。作っているのは勤務表を作成するプログラムです。ソースは下記の通りです。
><pre>#include <stdio.h>

struct syain{

int no;

char name[40];

int kaisuu1;

int kaisuu2;

int kaisuu3;

int kaisuu4;

int kaisuu5;
};

main()

{

struct syain kinmu[3];

int i;
int j;
int h=0,n=0,o=0,y=0,k=0;

char work[3][10];

char ans;
int t;

for(i=0; i<3; i++){

printf("社員番号は?\n");
scanf("%d",&kinmu[i].no);
printf("名前は?");
scanf("%s",kinmu[i].name);
printf("勤務(早番:1 日勤:2 遅番:3 夜勤:4 休日:5)は?\n");

for(j=0; j<10; j++){
printf("%d日は?\n" ,j+1);
scanf("%c\n" ,&work[i][j]);
if(work[i][j] == '1'){
kinmu[i].kaisuu1=h++;
}

if(work[i][j] == '2'){
kinmu[i].kaisuu2=n++;
}

if(work[i][j] == '3'){
kinmu[i].kaisuu3=o++;
}

if(work[i][j] == '4'){
kinmu[i].kaisuu4=y++;
}

if(work[i][j] == '5'){
kinmu[i].kaisuu5=k++;
}
}
}

/*printf("これでいいですか(YES:y NO:n)");

scanf("%c" ,ans);

if(ans == 'y'){

break;

}*/


printf("+------------------------------------------------------------------------------------------------------+\n");

printf("| NO | 名前 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 早番 | 日勤 | 遅番 | 夜勤 | 休日 |\n");

for (i=0; i<3; i++){
printf("| %d | %s |" ,kinmu[i].no,kinmu[i].name);

for(j=0; j<10; j++){
printf(" %c |" ,work[i][j]);
}

printf(" %d回 | %d回 | %d回 | %d回 | %d回 |\n" ,kinmu[i].kaisuu1,kinmu[i].kaisuu2,kinmu[i].kaisuu3,kinmu[i].kaisuu4,kinmu[i].kaisuu5);
printf("\n");
}

printf("+------------------------------------------------------------------------------------------------------+\n");

return 0;

}
</pre>



この投稿にコメントする

削除パスワード

No.18863

Re:scanfがうまく動きません
投稿者---RAPT(2004/12/23 03:39:00)


"%d" を " %d" に変更すればよい



この投稿にコメントする

削除パスワード

No.18864

Re:scanfがうまく動きません
投稿者---かずま(2004/12/23 07:03:12)


2つ目の投稿 (No. 18857) で、

    scanf("%d",&kinmu[i]);
を
    scanf("%d",&kinmu[i].no);

に訂正しているようですが、投稿に失敗しているのをなんとも思わないので
しょうか?

私は、このような無作法な質問には答えないことにしているのですが、
1つ目の投稿 (No. 18856) がまともなので、お答えしましょう。

    scanf("%c\n" ,&work[i][j]);
を
    scanf(" %c", &work[i][j]);

にしてください。

そして、なぜこれでよいのか調べて報告してください。
分からなければ、また質問してください。誰かが答えてくれるでしょう。



この投稿にコメントする

削除パスワード

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