又是scanf有问题了

lazzyhippo 2009-01-29 07:09:13
程序总是静止在if(cal == '+')下面的scanf处,特别不能理解为什么,我的程序是为了运算矩阵加减法而做的,要是‘#’就退出‘+’‘-’就继续算,大家帮忙看看为什么总是出现这个死循环啊?
#include <stdio.h>

void main()
{
int m, n, x, tmp, s[10][10] = {0};
char cal = '+';
scanf("%d", &x);

for(; ; ){
if(cal == '+'){
for(m = 0; m <= x - 1; m++){
for(n = 0; n <= x - 1; n++){
scanf("%d", &tmp);
s[m][n] += tmp;
}
}
scanf("%c", &cal);
}else if(cal == '-'){
for(m = 0; m <= x - 1; m++){
for(n = 0; n <= x - 1; n++){
scanf("%d", &tmp);
s[m][n] -= tmp;
}
}
scanf("%c", &cal);
}else if(cal == '#'){
break;
}
}

for(m = 0; m <= x - 1; m++){
for(n = 0; n <= x - 1; n++){
printf("%5d", s[m][n]);
}
printf("\n");
}
}

...全文
237 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuchuzinnia 2009-02-02
  • 打赏
  • 举报
回复
ding
liushiyuyi 2009-02-02
  • 打赏
  • 举报
回复
在头文件中加入#include <string.h>
再在scanf()后加一句getchar()用以接收换行符
na2650945 2009-01-30
  • 打赏
  • 举报
回复
#include <stdio.h>
void main()
{
int m, n, x, tmp, s[10][10];
char cal='+';
printf("请输入矩阵的阶数。\n");
scanf("%d", &x);
for(m=0;m<x;m++)
for(n=0;n<x;n++)
{
printf("请输入矩阵a[%d][%d]\n",m,n);
scanf("%d",&s[m][n]);
}
while(cal!='#')
{
printf("请输入运算类型。\n");
fflush(stdin);
scanf("%c",&cal);
switch(cal)
{
case'+':{
for(m=0;m<x;m++)
for(n=0;n<x;n++)
{
printf("请输入矩阵b[%d][%d]\n",m,n);
scanf("%d",&tmp);
s[m][n]+=tmp;
}
break;
}

case'-':{
for(m=0;m<x;m++)
for(n=0;n<x;n++)
{
printf("请输入矩阵b[%d][%d]\n",m,n);
scanf("%d",&tmp);
s[m][n]-=tmp;
}
break;
}
case'#':break;
}
printf("请输入运算类型。\n");
fflush(stdin);
scanf("%c",&cal);
}
/*for(; ; )
{
scanf("%c", &cal);//判断运算类型。
if(cal == '+')
{
for(m = 0; m <= x - 1; m++)
{
for(n = 0; n <= x - 1; n++)
{
scanf("%d", &tmp);
s[m][n] += tmp;
}
}
continue;//运算结束之后继续循环。
}
else if(cal == '-')
{
for(m = 0; m <= x - 1; m++)
{
for(n = 0; n <= x - 1; n++)
{
scanf("%d", &tmp);
s[m][n] -= tmp;
}
}
continue;
}
else if(cal == '#')
{
break;
}
}*/

for(m = 0; m <= x - 1; m++)
{
for(n = 0; n <= x - 1; n++)
{
printf("%5d", s[m][n]);
}
printf("\n");
}
}


这么改了之后应该满足你的要求了。
na2650945 2009-01-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yangkunhenry 的回复:]
C/C++ code
fflush(stdin);
scanf("%c", &cal);
[/Quote]
把输入流文件清空就好了?
为什呢。
我那么做为什么不用呢。
clc0925 2009-01-30
  • 打赏
  • 举报
回复
需要提倡友好界面
lazzyhippo 2009-01-29
  • 打赏
  • 举报
回复
它题目要求就挺怪的。下面是要求,我这么写就是把判断的过程包含在每次的判断执行的语句里面了


【输入形式】
从标准输入读取输入。第一行只有一个整数N(1≤N≤10),代表矩阵的阶数。
接下来是一个矩阵,是N行,每行有N个整数(可能是正、负整数),是矩阵的所有元素。
然后一行只含一个字符“+”或“-”,代表加、减操作。
然后用同样的方式输入另一个矩阵。
后续仍然是运算符和矩阵。直至运算符为“#”时停止计算,将结果输出。

【输出形式】
向标准输出打印矩阵的操作结果。输出N行,每行对应矩阵在该行上的所有元素,每一行末均输出一个回车符。每个元素占5个字符宽度(包括负号),向右对齐,不足部分补以空格。
【输入样例】
3
1 -2 7
2 8 -5
3 6 9
+
3 5 7
-1 2 6
3 7 10
-
1 -2 7
2 8 -5
3 6 9
#
【输出样例】
(下图中”-”代表空格)
####3####5####7
###-1####2####6
####3####7###10
yangkunhenry 2009-01-29
  • 打赏
  • 举报
回复

fflush(stdin);
scanf("%c", &cal);
na2650945 2009-01-29
  • 打赏
  • 举报
回复
#include <stdio.h>
void main()
{
int m, n, x, tmp, s[10][10] = {0};
char cal;
scanf("%d", &x);

for(; ; )
{
scanf("%c", &cal);//判断运算类型。
if(cal == '+')
{
for(m = 0; m <= x - 1; m++)
{
for(n = 0; n <= x - 1; n++)
{
scanf("%d", &tmp);
s[m][n] += tmp;
}
}
continue;//运算结束之后继续循环。
}
else if(cal == '-')
{
for(m = 0; m <= x - 1; m++)
{
for(n = 0; n <= x - 1; n++)
{
scanf("%d", &tmp);
s[m][n] -= tmp;
}
}
continue;
}
else if(cal == '#')
{
break;
}
}

for(m = 0; m <= x - 1; m++)
{
for(n = 0; n <= x - 1; n++)
{
printf("%5d", s[m][n]);
}
printf("\n");
}
}


这么改就解决了。
但是为什么我也不清楚。
我自己调试看了。
开始设置二维矩阵。
执行的顺序是进行4个循环。
输入1,2,3,#的话。
可以输出是1,2,3,3。
不明白为什么。
在原程序中获得判断符时候也停止了。
期待高手解答。
giant7 2009-01-29
  • 打赏
  • 举报
回复
我大致编译了一下你的程序,在for(m = 0; m <= x - 1; m++) 好像通不过,X 是什么,没有初始化,循环语句没有执行!!,
你再改改,看看如何!!!
waizqfor 2009-01-29
  • 打赏
  • 举报
回复
断点 debug检查看看 最好输入之前都要有个printf提示
snail_new 2009-01-29
  • 打赏
  • 举报
回复
这样就好了
你设置的读取cal的位置有点诡异
不知道这样是不是符合你的要求


#include <stdio.h>

void main()
{
int m, n, x, tmp, s[10][10] = {0};
char cal = '+';
scanf("%d", &x);

for(; ; )
{
if(cal == '+')
{
for(m = 0; m <= x - 1; m++)
{
for(n = 0; n <= x - 1; n++)
{
scanf("%d", &tmp);
s[m][n] += tmp;
}
}
}
scanf("%c", &cal);
if(cal == '-')
{
for(m = 0; m <= x - 1; m++)
{
for(n = 0; n <= x - 1; n++)
{
scanf("%d", &tmp);
s[m][n] -= tmp;
}
}
}
// scanf("%c", &cal);
else if(cal == '#')
{
break;
}
}

for(m = 0; m <= x - 1; m++)
{
for(n = 0; n <= x - 1; n++)
{
printf("%5d", s[m][n]);
}
printf("\n");
}
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧