0

配列に文字値を挿入すると、プログラムが終了しました。文字値を挿入すると、プログラムを終了せずにループを続行し、次の整数値を取得します。私のコードで何が問題なのですか。

私のコード:

#include<stdio.h>
#include<ctype.h>

int main()
{
    int row1, col1, row2, col2, i, j, k, sum = 0;
    int first[10][10], second[10][10], multiply[10][10];
    clrscr();
    printf("Enter the no of rows and columns of first matrix\n");
    scanf("%d%d",&row1,&col1);
    printf("Enter the Element of first matrix");
    for(i=0;i<row1;i++){
        for(j=0;j<col1;j++){
            printf("\nEnter %d element %d row",j+1,i+1);
            scanf("%d",&first[i][j]);
            check = first[i][j];
            printf("%d",check);
            if(check>0 || check<0)
            {
                printf("this is digit \n");
            }
            else
            {
                printf("this is not digit\n");
                printf("\nEnter %d element %d row",j+1,i+1);
                scanf("%d",&first[i][j]);
            }
        }
    }
    printf("Enter the no of rows and columns of second matrix\n");
    scanf("%d%d",&row2,&col2);

    if(col1 == row2){
        printf("Enter the Element of second matrix");
        for(i=0;i<row2;i++){
            for(j=0;j<col2;j++){
                printf("\nEnter %d element %d row",j+1,i+1);
                scanf("%d",&second[i][j]);
            }
        }

        for(i=0;i<row1;i++){
            for(j=0;j<col2;j++){
                for(k=0;k<row2;k++){
                    multiply[i][j]=sum;
                    sum=0;
                }
            }
        }
        printf("Multiplication of matrices=\n");
        for(i=0;i<row1;i++){
            for(j=0;j<col2;j++){
                multiply[i][j]=0;
                for(k=0;k<row1;k++){
                    multiply[i][j] += first[i][k] * second[k][j];
                }
                printf("%d\t",multiply[i][j]);
            }
            printf("\n");
        }
    }
    else{
        printf("You are incorrect. According to the requirement of matrix multiplication, the number of column of first matrix should equal to the number of rows of second matrix.");
    }
    getch();
    return 0;
}

ありがとうございます

4

2 に答える 2

2

scanf正常に読み取られたエントリの数を返します。数値を読み取ろうとしたときに数値以外の値が指定された場合、scanfゼロを返します。scanfが返されるまで、繰り返しユーザーに入力を求める必要があります1。これを行うためにコードを変更する 1 つの方法を次に示します。

for(;;) {
    printf("\nEnter %d element %d row",j+1,i+1);
    if (scanf("%d",&first[i][j]) == 1) break;
    // Read and ignore the invalid input. 's' means "string", '*' means "ignore".
    scanf("%*s");
    printf("\nThe data you entered was incorrect.");
}
于 2013-01-31T11:13:36.457 に答える
2

実行すると

scanf("%d",&first[i][j])

これは、scanf整数のみを受け入れることを意味します。英字を入力すると、scanf は何も読み取らず、値として 0 を返します。first[i][j]

scanf("%d");stdin はまだアルファベット文字から消去されていないため、次 は (数値であっても) 入力を取得できません。

これを交換

for(i=0;i<row1;i++){
        for(j=0;j<col1;j++){
            printf("\nEnter %d element %d row",j+1,i+1);
            scanf("%d",&first[i][j]);

for(i=0;i<row1;i++){
        for(j=0;j<col1;j++){
            printf("\nEnter %d element %d row",j+1,i+1);
            while (scanf("%d",&first[i][j]))<=0) {
                printf("this is not digit\n");
                printf("\nEnter %d element %d row",j+1,i+1);
                scanf("%*[^\n]"); // this clean your input buffer in case yhe input is not integer
            }

このブロックを削除します。

            check = first[i][j];
            printf("%d",check);
            if(check>0 || check<0)
            {
                printf("this is digit \n");
            }
            else
            {
                printf("this is not digit\n");
                printf("\nEnter %d element %d row",j+1,i+1);
                scanf("%d",&first[i][j]);
            }
于 2013-01-31T11:15:57.107 に答える