初学者在C程序设计现代方法中遇到题目。请各位看下哪里的问题

要求在输入一个整数n后,显示出从1-n所有整数,以及他们的平方。
要求是每隔24个数暂停一下,屏幕输出“press enter to continue ”----用户输入内容----程序判断用户输入的字符是否是换行,如果是,继续循环(即从25开始输出)。
#include
int main(void)
{
int i,n;
printf("This program prints a table of squares.\n");
printf("Enter a number of entries in table:");
scanf("%d",&n);
for(i=1;i<=n;i++){
printf("%10d%10d\n",i,i*i);
if(i%24==0){
printf("press enter to continue...\n");
while(getchar()!='\n')
;
}
}
return 0;
}
我运行了我的程序,第一个空格按下后,直接输出了两段,即1-24,25-48。后面的正常。应该是第一次按回车被getchar()读取了,所以输出了25-48。但是怎么改呢?谢谢各位!

c

6个回答

 #include<stdio.h>
int main(void)
{
int i,n;
printf("This program prints a table of squares.\n");
printf("Enter a number of entries in table:");
scanf("%d",&n);
getchar();加上这个
for(i=1;i<=n;i++){
printf("%10d%10d\n",i,i*i);
if(i%24==0){
printf("press enter to continue...\n");
while(getchar()!='\n')
;
}
}
return 0;
}
whyyouhitme_
whyyouhitme_ 牛逼了,请问是什么原理啊,是不是这个getchar()把第一个回车读取了,所以不会导致第一次回车把25-48显示出来?
一年多之前 回复

printf("press enter to continue...\n");
while(getchar()!='\n')
;
->
system("pause");

whyyouhitme_
whyyouhitme_ 谢谢老哥耐心解答,问题已解决!
一年多之前 回复
whyyouhitme_
whyyouhitme_ 回复caozhy: 既然等同于这个。为什么我运行起来就不对呢?
一年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复whyyouhitme_: 看下面的动画。
一年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复whyyouhitme_: 放在if(i%24==0)里
一年多之前 回复
whyyouhitme_
whyyouhitme_ 回复qq_32578931: 亲测。不放到循环里,不会一下显示24个数。只会一个一个的显示。
一年多之前 回复
whyyouhitme_
whyyouhitme_ 回复qq_32578931: 亲测。不放到循环里,不会一下显示24个数。只会一个一个的显示。
一年多之前 回复
weixin_40838170
weixin_40838170 再加一个getchar试试?
一年多之前 回复
qq_38769643
qq_38769643 这个要运用到C语言知识
一年多之前 回复
qq_32578931
qq_32578931 不用把getchar放到if的判断语句里
一年多之前 回复
StackTc
StackTc 回复caozhy: 你是问答 达人啊,天天看到你在回答问题。
一年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复whyyouhitme_: 调用pause就会显示那句话,并且等待输入。
一年多之前 回复
whyyouhitme_
whyyouhitme_ 回复caozhy: 最后一句啥意思。。目前是书的第七章。还没出现过这个。。。另外请问我的逻辑错误在哪?
一年多之前 回复
 #include<stdio.h>
int main(void)
{
int i,n;
printf("This program prints a table of squares.\n");
printf("Enter a number of entries in table:");
scanf("%d",&n);
getchar();加上这个
for(i=1;i<=n;i++){
printf("%10d%10d\n",i,i*i);
if(i%24==0){
printf("press enter to continue...\n");
while(getchar()!='\n')
;
}
}
return 0;
}


#include
int main(void)
{
int i,n;
printf("This program prints a table of squares.\n");
printf("Enter a number of entries in table:");
scanf("%d",&n);
getchar();加上这个
for(i=1;i<=n;i++){
printf("%10d%10d\n",i,i*i);
if(i%24==0){
printf("press enter to continue...\n");
while(getchar()!='\n')
;
}
}
return 0;
}


图片说明

whyyouhitme_
whyyouhitme_ 回复caozhy: 老哥。你这个不对啊。程序要求只有输入回车的时候才继续。你这个是输入任意键都能继续
一年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复whyyouhitme_: 你说你想学点别的方法,那么没问题。但是你要回答了还说这个没学过那个没学到。这话就不好听了。你要使采纳了,可以给你再写别的方法。
一年多之前 回复
whyyouhitme_
whyyouhitme_ 回复caozhy: 牛逼。但是现在没学到这里啊。题目旨在锻炼我getchar的用法。以及复习之前学过的循环
一年多之前 回复

也可以使用scanf自带的格式控制符来解决:scanf("%*d%*[^\n]",&n); 告诉scanf空格和换行符一律不读进去。

scanf会把换行读入到stdin输入缓冲区里,你可以使用fflush(stdin) 将其给刷新出来!这样就避免了下一次scanf读取输入缓冲区时将换行直接给读进去的问题了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!