scanf 被忽略
Scanf is ignored
我有一个作业,其中我必须输入第一个矩阵的维度,然后我想执行哪个操作('-'、'+'或'*';分别为减法、加法和乘法),然后是第二个矩阵的维度。但在进入第一维后,我收到与 char 有关的错误消息。即使在阅读了很多与 scanf 相关的空格和错误之后,我也无法弄清楚。请帮忙。谢谢
int main(void){
int rows_1 = 0, columns_1 = 0; //MATRIX_1 DIM
int rows_2 = 0, columns_2 = 0; //MATRIX_2 DIM
char c = ' ';
if(scanf("%d %d", &rows_1, &columns_1)!=2) //input first size
{
fprintf(stderr, "Error!\n");
return 100;
}
scanf("%c", &c);
if( c!='*' || c!='-' || c!='+' ) //error handling for char
{
fprintf(stderr, "Error!\n");
return 100;
}
if(scanf("%d%d", &rows_2, &columns_2)!=2) //input second size
{
fprintf(stderr, "Error!\n");
return 100;
}
return 0;
}
你有两个个问题:
首先是 c
将包含您在输入 rows_1
和 columns_1
之后按下的 换行符 .在格式字符串中添加单个前导 space:" %c"
以跳过前导白色-space(如换行符)。
第二个问题是逻辑条件错误,无论c
.
的输入如何,总是true
您可能需要 c=='*' || c=='-' || c=='+'
的反义词,根据 De Morgan's laws 是 c!='*' && c!='-' && c!='+'
(但您也可以使用逻辑否定运算符 !
,如 !(c=='*' || c=='-' || c=='+')
).
如果你稍微想一想,这是很容易理解的。假设 c
是换行符 '\n'
。那么 c!='*'
是 true 并且由于逻辑运算符的 short-circuit evaluation ,其余条件将不会被评估。任何其他字符都会发生同样的情况,包括您检查的字符(将换行符换成例如 '-'
和 c!='*'
仍然是正确的;也可以尝试使用 '*'
然后 c!='*'
将为假,但 c!='-'
将为真)。
我有一个作业,其中我必须输入第一个矩阵的维度,然后我想执行哪个操作('-'、'+'或'*';分别为减法、加法和乘法),然后是第二个矩阵的维度。但在进入第一维后,我收到与 char 有关的错误消息。即使在阅读了很多与 scanf 相关的空格和错误之后,我也无法弄清楚。请帮忙。谢谢
int main(void){
int rows_1 = 0, columns_1 = 0; //MATRIX_1 DIM
int rows_2 = 0, columns_2 = 0; //MATRIX_2 DIM
char c = ' ';
if(scanf("%d %d", &rows_1, &columns_1)!=2) //input first size
{
fprintf(stderr, "Error!\n");
return 100;
}
scanf("%c", &c);
if( c!='*' || c!='-' || c!='+' ) //error handling for char
{
fprintf(stderr, "Error!\n");
return 100;
}
if(scanf("%d%d", &rows_2, &columns_2)!=2) //input second size
{
fprintf(stderr, "Error!\n");
return 100;
}
return 0;
}
你有两个个问题:
首先是
c
将包含您在输入rows_1
和columns_1
之后按下的 换行符 .在格式字符串中添加单个前导 space:" %c"
以跳过前导白色-space(如换行符)。第二个问题是逻辑条件错误,无论
的输入如何,总是c
.true
您可能需要
c=='*' || c=='-' || c=='+'
的反义词,根据 De Morgan's laws 是c!='*' && c!='-' && c!='+'
(但您也可以使用逻辑否定运算符!
,如!(c=='*' || c=='-' || c=='+')
).如果你稍微想一想,这是很容易理解的。假设
c
是换行符'\n'
。那么c!='*'
是 true 并且由于逻辑运算符的 short-circuit evaluation ,其余条件将不会被评估。任何其他字符都会发生同样的情况,包括您检查的字符(将换行符换成例如'-'
和c!='*'
仍然是正确的;也可以尝试使用'*'
然后c!='*'
将为假,但c!='-'
将为真)。