当我在数组中插入字符值时,我的程序退出了。如果我插入字符值,我想继续我的循环没有退出程序并采取下一个整数值。 我的代码中有什么不对。
我的代码:
#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;
}
感谢你
答案 0 :(得分:2)
scanf
返回已成功读取的条目数。当您尝试读取数字但提供的是非数字值时,scanf
将返回零。在scanf
返回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.");
}
答案 1 :(得分: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]);
}