鱼C论坛

 找回密码
 立即注册
查看: 5010|回复: 11

for死循环问题求助!

[复制链接]
发表于 2013-8-25 22:18:08 | 显示全部楼层 |阅读模式

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

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

x
#include "stdio.h"
#pragma warning (disable:4996)
void main()
{
        int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
        int (*q)[4];
        int i,j;
        q=a;
        scanf("%d",&i);//问题求助 输入j(除输入数字外)时,为什么会进入无限死循环。
        for(;(i>3)||(i<0);)//会输入j时会跳过输入 为什么
        {
                printf("bug\n");
                scanf("%d",&i);
        }
        scanf("%d",&j);//同上。 我调试不出来
        for(;(j>4)||(j<0);)
        {
                printf("bug\n");
                scanf("%d",&j);
        }
        printf("%d",*((*(q+i))+j));

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-25 22:25:04 | 显示全部楼层
  1. #include "stdio.h"
  2. #pragma warning (disable:4996)
  3. void main()
  4. {
  5.         int a[3][4]={
  6.                         0,1,2,3,
  7.                         4,5,6,7,
  8.                         8,9,10,11};
  9.         int (*q)[4];
  10.         int i,j;
  11.         q=a;
  12.         scanf("%d",&i);//问题求助 输入j(除输入数字外)时,为什么会进入无限死循环。
  13.         for(;(i>3)||(i<0);)//会输入j时会跳过输入 为什么
  14.         {
  15.                 printf("bug\n");
  16.                                 fflush(stdin); //这里加上这句
  17.                 scanf("%d",&i);
  18.         }
  19.         scanf("%d",&j);//同上。 我调试不出来
  20.         for(;(j>4)||(j<0);)
  21.         {
  22.                 printf("bug\n");
  23.                                 fflush(stdin); //这里也加上这句
  24.                 scanf("%d",&j);
  25.         }
  26.         printf("%d\n",*((*(q+i))+j));
  27. }
  28.                
复制代码
看修改后的代码,找出不同的地方。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-25 22:39:58 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-25 22:42:40 | 显示全部楼层
fflush(stdin)
功能:清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);)。
注意:此函数仅适用于部分编译器(如VC6),但是并非所有编译器都要支持这个功能(如gcc3.2)。这是一个对C标准的扩充。
剩下的请自己百度。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-25 22:45:05 | 显示全部楼层
liufei_vip 发表于 2013-8-25 22:42
fflush(stdin)
功能:清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着 ...

我csdn过了 就是 我是新手 不懂 为什么要清空缓冲区,你在重新输入的时候不是会自动覆盖么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-25 22:48:03 | 显示全部楼层
清空输入缓冲区。不加的话,缓冲区里有数据,scanf函数会直接去读缓冲区里的数据。没等你输入,scanf就执行了。然后就死循环了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-25 22:51:23 | 显示全部楼层
liufei_vip 发表于 2013-8-25 22:48
清空输入缓冲区。不加的话,缓冲区里有数据,scanf函数会直接去读缓冲区里的数据。没等你输入,scanf就执行 ...

哦,原来scanf这么坑爹 谢谢了! 长知识了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-25 22:52:34 | 显示全部楼层
嗯,学习就是积累的过程,加油。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-25 23:34:23 | 显示全部楼层
liufei_vip 发表于 2013-8-25 22:42
fflush(stdin)
功能:清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着 ...

O(∩_∩)O~ 我都是用
setbuf(stdin,NULL);的 O(∩_∩)O~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-26 08:39:29 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-8-25 23:34
O(∩_∩)O~ 我都是用
setbuf(stdin,NULL);的 O(∩_∩)O~

没用过,关闭缓冲区不知道有什么影响。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-26 12:03:19 | 显示全部楼层
#include<stdio.h>

#pragma warning (disable:4996)

void main()
{
        int a[3][4]={0, 1,2,3,4,5,6,7,8,9,10,11};
        int (*q)[4];
        int i, j;

        q = a;
        printf("please input a number for i ");
        scanf("%d",&i);
        while(i>3 ||i < 0)
        {
                printf("please there is an error , input again");
                scanf("%d",&i);
        }

        printf("\n");

        printf("please enter a number for j :");
        scanf("%d",&j);

        while(j>4 || j< 0)    把for 换成while 会更容易理解
        {
                printf("An error please enter again");
                scanf("%d",&j);
        }

        printf("a[%d][%d] = %d ",i , j , *(a[i]+j));
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-27 00:16:48 | 显示全部楼层
鱼币鱼币鱼币鱼币鱼币:loveliness::loveliness:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-5 18:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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