| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1221 人关注过本帖
标题:跳不出循环
只看楼主 加入收藏
新人学习
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:145
专家分:187
注 册:2017-10-26
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:8 
跳不出循环
    while((j=scanf("%d",&t))!=1||t<=0||t>BIAO)
    {
        if(j!=1)
        
            scanf("%*s");
        
            puts("输入错误,重新输入");
    }
    tiao(arry,BIAO,t);
    for(i=0;i<BIAO;i++)
    printf("%-4d",arry[i]);
    putchar('\n');
    for(i=0;i<BIAO;i++)
    printf("%-4d",arry[i]);
    printf("\n");
    puts("退出请按'q',选择继续随意按键!");
    scanf("%*s");
        scanf("%c",&ch);
   

    }

   
搜索更多相关主题的帖子: 循环 scanf for i++ printf 
2017-11-17 18:40
新人学习
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:145
专家分:187
注 册:2017-10-26
收藏
得分:0 
我按了q 可是还跳不出循环.
2017-11-17 18:41
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:7 
scanf("%*s"); 这是啥鸟

DO IT YOURSELF !
2017-11-17 20:05
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:7 
回复 3楼 wp231957
嗯,这个就是你的基础问题咯~意思是输入一个字符串然后废弃该字符~所以这里后面没有带参数~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-11-17 21:57
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
以下是引用新人学习在2017-11-17 18:41:00的发言:

我按了q 可是还跳不出循环.

这个没有看到所谓的结束循环条件~看看完整的代码块~


这样scanf("%*s");来清理缓冲区感觉s里面有数字同样会把数字清除掉而丢失数据~但下一次同样会跳过空格读取数据~

scanf("%*[^\n]");这样一次清理掉全部缓冲区你说会不会更好?~

[此贴子已经被作者于2017-11-17 22:06编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-11-17 22:00
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:7 
回复 5楼 九转星河
那最后的回车呢
scanf("%*[^\n]%*c");

早知做人那么辛苦!  当初不应该下凡
2017-11-17 22:49
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 6楼 炎天
好像原贴也没有考虑这个问题~加上的话当然会更好~不过实际可行性还要测试一下~
当然对于这例是可行的~不过对于输入字符串判断用scanf还要考虑数组越界问题~通常会用fgets或者用专门的方法输入数据~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-11-17 23:26
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
简单写了个输入字符串以及对缓冲区溢出问题的处理~
感觉这个scanf用得最实在了~问题就是fgets会自带'\n'看设计者有没有需要保留这个'\n'而定~
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 5

int main( void )
{
    char s[N];
    char* p;
   
    fgets(s,N,stdin);
    
   if ((p=strchr(s,'\n'))!=NULL)
       *p='\0';
   else
       scanf("%*[^\n]%*c");
       
        
    puts(s);
    
    getchar();
    puts("结束程序!");
    
    return 0;
}


[此贴子已经被作者于2017-11-18 00:01编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-11-17 23:58
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 6楼 炎天
以下是引用炎天在2017-11-17 22:49:38的发言:

那最后的回车呢
scanf("%*[^\n]%*c");

还有我试过了,这种我保留意见是因为如果是scanf("%c",&ch);这样一开始输入回车刚好把'\n'吸收了~这样就会在那句上要多输入一个%*c才能继续执行~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-11-18 03:24
快速回复:跳不出循环
数据加载中...
 
   



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

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