鱼C论坛

 找回密码
 立即注册
查看: 2230|回复: 10

[已解决]关于一道编程题的疑问

[复制链接]
发表于 2017-10-20 09:26:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目的是输出平方表,并且每实现24次平方就等待回车继续 为什么这段代码不对
#include <stdio.h>

int main()
{
    int n,x=0;
    printf("This program prints a table of squares.\n");
    printf("Enter number of entries in table:");
    scanf("%d",&n);
   
    for(int i=1;i<=n;i++)
    {
        printf("%10d%10d\n",i,i*i);
        
        if(x<24)
            x++;
        else{
            printf("Press Enter to continue..");
            if (getchar()=='\r') {
                x=0;
               
            }
            }
    }
    return 0;
   
}
最佳答案
2017-10-22 00:11:05
首先由前面几位大佬所说,这种情况最好用%;
不过如果执意用你的方法,需要以下几处修改:
1、int i=1;写在前面而不是for内
2、getchar()读取的回车键不是'\r'而是'\n',所以应将'\r'改为'\n'
3、你仔细观察你写的for循环中的x你会意识到,你每次输出的数据数是25个(x==0~x==24)而不是24个,所以应将<24改为<23
4、处理完以上三点你会发现,第一次输出的是48个数据(以后每次24个),这是因为你在scanf后打的回车中的'\n'还保存在缓存区中(输入流问题),故应在scanf后加个getchar();将'\n'消耗掉


修改后的代码如下:

#include <stdio.h>

int main()
{
    int n,x=0;
    int i=1;
    printf("This program prints a table of squares.\n");
    printf("Enter number of entries in table:");
    scanf("%d",&n);
        getchar();


    for(;i<=n;i++)
    {
        printf("%10d%10d\n",i,i*i);
        
        if(x<23)
            x++;
        else
                {
            printf("Press Enter to continue..");
            if (getchar()=='\n')
                        {
                x=0;
               
            }
        }
    }
    return 0;
}
不过我还是建议你用闪电猫网络的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-20 10:09:37 | 显示全部楼层
本帖最后由 闪电猫网络 于 2017-10-20 10:25 编辑

for(int i=1;i<=n;i++),外部循环五次就结束了,下边那个if根本就没达到判断条件。并且我理解的意思是,如果是从1的平方开始列,24次停止一次,输入n的目的是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-20 10:13:49 | 显示全部楼层
本帖最后由 千亩计者 于 2017-10-20 10:16 编辑

for(int i=1;i<=n;i++),这里有语法问题,i应该和n,x一起定义,不能用到时再定义:
另外你说是实现24次平方,是1-24的平方吗,这样的话,for循环下面那一段if...else....多余了,把这段删掉,输入24就打印出来了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-20 10:30:07 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main()
  4. {
  5.         int i=1;
  6.         printf("This program prints a table of squares.\n");
  7.         printf("Enter number of entries in table:");
  8.         system("pause");
  9.                 for ( i ; i ; i++)
  10.                 {
  11.                
  12.                         printf("%10d%10d\n", i, i*i);
  13.                         if (i%24==0)
  14.                         {
  15.                                 printf("Press Enter to continue..");
  16.                                 system("pause");
  17.                         }
  18.                 }
  19.         system("pause");
  20.         return 0;
  21. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-20 11:56:14 | 显示全部楼层
题注的想法和代码有偏差
建议画画流程图,这样可以清楚循环在干什么,什么时后跳出循环。

题主的意思是输入一个n,从1道n输入平方表
但是输出的时候每24个输出暂停一次

if(i%24 ==0)这个是关键
           
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-20 23:07:13 From FishC Mobile | 显示全部楼层
手边没机器,大概说下问题,第一:定义,楼主的C语言基础不扎实,不能这样同时定义并且同时给他们赋值,有可能造成x=0,n随机。第二:输入验证,如果在暂停的位置我不输回车,输入别的字符回车,那么x不会归零,会出现打印一行数据下一行就是Enter …,还有,每多少次干什么事,第一反应应该是用%。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-22 00:11:05 | 显示全部楼层    本楼为最佳答案   
首先由前面几位大佬所说,这种情况最好用%;
不过如果执意用你的方法,需要以下几处修改:
1、int i=1;写在前面而不是for内
2、getchar()读取的回车键不是'\r'而是'\n',所以应将'\r'改为'\n'
3、你仔细观察你写的for循环中的x你会意识到,你每次输出的数据数是25个(x==0~x==24)而不是24个,所以应将<24改为<23
4、处理完以上三点你会发现,第一次输出的是48个数据(以后每次24个),这是因为你在scanf后打的回车中的'\n'还保存在缓存区中(输入流问题),故应在scanf后加个getchar();将'\n'消耗掉


修改后的代码如下:

#include <stdio.h>

int main()
{
    int n,x=0;
    int i=1;
    printf("This program prints a table of squares.\n");
    printf("Enter number of entries in table:");
    scanf("%d",&n);
        getchar();


    for(;i<=n;i++)
    {
        printf("%10d%10d\n",i,i*i);
        
        if(x<23)
            x++;
        else
                {
            printf("Press Enter to continue..");
            if (getchar()=='\n')
                        {
                x=0;
               
            }
        }
    }
    return 0;
}
不过我还是建议你用闪电猫网络的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-23 07:36:22 | 显示全部楼层
carrymyself 发表于 2017-10-22 00:11
首先由前面几位大佬所说,这种情况最好用%;
不过如果执意用你的方法,需要以下几处修改:
1、int i=1;写 ...

谢谢,就是那个\n的问题,,不过不明白为什么不能把int i=1定义在for内
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-26 21:46:23 | 显示全部楼层

为什么不能把int i=1定义在for内
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-26 21:53:52 | 显示全部楼层
︶ㄣ.蒾途椥返ゞ 发表于 2017-10-26 21:46
为什么不能把int i=1定义在for内

C语言的语法就是这样的,变量的赋值在程序开头完成,不能遍地开花
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-15 07:33:23 | 显示全部楼层
看来还有很多东西要学习啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 11:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表