| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1281 人关注过本帖
标题:输出9*9口诀遇到的问题,求讲解
只看楼主 加入收藏
天外
Rank: 2
等 级:论坛游民
帖 子:29
专家分:16
注 册:2011-6-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
输出9*9口诀遇到的问题,求讲解
注释处问题
程序代码:
#include<stdio.h>
int main()
{
    int a;
    int num;
    do{
        printf("请输入一个1—9的整数:");
        num=scanf("%d",&a);            //有个疑问:输入字符时是此处的scanf接受还是下面的getchar接收?
        while(getchar()!='\n')        //此处while与下面scanf都可解决输入不是数字问题。
            continue;
        //scanf("%*[^\n]%*c");
    }while(num!=1||a<1||a>9);

 
        for(int i=1;i<=a;i++)
        {
          for(int j=1;j<=i;j++)
           printf("%2d*%d=%2d",j,i,j*i);
          printf("\n");
        }

 
    return 0;
}


[ 本帖最后由 天外 于 2013-4-12 08:17 编辑 ]
搜索更多相关主题的帖子: 讲解 疑问 
2013-04-11 17:59
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:2 
建议用getchar,然后去除回车,用scanf限制太多

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-04-11 18:02
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:7 
你如果两个都存在的话,那么程序的运行会一步步进行,即你输入一个字符,字符传递给getchar();即第一个获取函数,但是还会运行scanf函数的,接受第二个字符,scanf为格式输入函数,"%*c%*[^\n]"是输入格式。文中的语句还缺少一个接收变量,完整语句应该是:char a;scanf("%*c%*[^\n]",&a);程序执行到此时,键盘输入 %*(任意字符)*[^\n]  后按回车,则程序中变量a就存储了你输入的那个“任意字符”,

Maybe
2013-04-11 18:53
罗庇鹏ksq
Rank: 5Rank: 5
来 自:太平洋
等 级:职业侠客
帖 子:220
专家分:310
注 册:2012-6-30
收藏
得分:0 
不知道你程序想干嘛。

从来都是无所谓,现在也该学着有所谓。✿咱们一个人,别坐井观天❀
2013-04-11 19:00
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
e   这是你所谓的9 9乘法表吗

三十年河东,三十年河西,莫欺少年穷!
2013-04-11 19:15
zc1992312
Rank: 2
等 级:论坛游民
帖 子:43
专家分:12
注 册:2013-3-20
收藏
得分:2 
我给你写个:
#include <stdio.h>
 main()
{
int i, j, k;
for(i=1;i<10;i++)
{
for(j=i;j<10;j++)
{k=i*j;
printf("%d*%d=%-3d",i,j,k);
}
printf("\n");
}
}
2013-04-11 21:11
czzdcn123
Rank: 7Rank: 7Rank: 7
来 自:江西
等 级:黑侠
威 望:3
帖 子:258
专家分:510
注 册:2013-3-7
收藏
得分:1 
用getchar好点
2013-04-11 22:17
天外
Rank: 2
等 级:论坛游民
帖 子:29
专家分:16
注 册:2011-6-10
收藏
得分:0 
以下是引用邓士林在2013-4-11 18:53:05的发言:

你如果两个都存在的话,那么程序的运行会一步步进行,即你输入一个字符,字符传递给getchar();即第一个获取函数,但是还会运行scanf函数的,接受第二个字符,scanf为格式输入函数,"%*c%*[^\n]"是输入格式。文中的语句还缺少一个接收变量,完整语句应该是:char a;scanf("%*c%*[^\n]",&a);程序执行到此时,键盘输入 %*(任意字符)*[^\n]  后按回车,则程序中变量a就存储了你输入的那个“任意字符”,

好像我标错了,是第一个scanf和getchar哪个接受的问题?
我又改了改...
2013-04-12 08:33
ly371031846
Rank: 2
等 级:论坛游民
帖 子:40
专家分:79
注 册:2013-4-9
收藏
得分:2 
#include<stdio.h>
main()
{int i,j;
for(i=1;i<=9;i++){for(j=1;j<=9;j++)
if(i<j)continue;
else printf("%2d*%d=%2d",i,j,i*j);
printf("\n");
}
}这样也可以啊!
2013-04-12 09:18
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:3 
回复 8楼 天外
那样它俩更没有多大关联,第一个num=scanf("%d",&a); 是输入你所需要的乘法列表, while(getchar()!='\n')  这个判断是你输入的字符是否为换行,即enter确定键,如果是则continue,跳出,break跳出也可以,然后while(num!=1||a<1||a>9);进行判断输入的num是否为1-9,不是的话则继续输入,直至输入正确为止,然后进行for循环输出乘法表。
 num=scanf("%d",&a);            //这个是输入你想要的乘法表的范围,
        while(getchar()!='\n')        //这个即判断你是否输入enter键,即换行确定,然后对下进行判断
            continue;

Maybe
2013-04-13 10:05
快速回复:输出9*9口诀遇到的问题,求讲解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017316 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved