请教一个“按回车跳出循环的”语句
Tofloor
poster avatar
zwq133
deepin
2018-08-27 04:44
Author
本帖最后由 zwq133 于 2018-8-27 15:05 编辑

恩,有一个循环,需要按回车键跳出(也就是跳过这个选项,继续下一个选项),不晓得咋写了,请教一下大神些
代码如下:
        while (diankou2 < 2 || diankou2 > 4094)
        {
                printf("\n配置业务vlan——电口tx2: ");
                scanf(" %d", &diankou2);               
                while (getchar() != '\n');
                if (diankou2 < 2 || diankou2 > 4094)
                {
                        printf("\n只能输入不小于\'2\'或大于\'4094\'的数字,请重新输入。\n");
                }
        }

已用21楼的方法完美解决,感谢各位!!



Reply Favorite View the author
All Replies
1 / 2
To page
avatar
deepin
2018-08-27 05:57
#1
c吗?我只知道c++的。
Reply View the author
avatar
cosct
deepin
2018-08-27 06:18
#2
在scanf之前getchar,是回车就break么
Reply View the author
avatar
deepin
2018-08-27 06:21
#3
char c;cout<
Reply View the author
avatar
deepin
2018-08-27 06:22
#4
错了cout<<“press enter to exit";cin>>c;
Reply View the author
avatar
deepin
2018-08-27 06:24
#5
wjkz 发表于 2018-8-26 22:18
在scanf之前getchar,是回车就break么

c我不懂,c++就这样。
Reply View the author
avatar
deepin
2018-08-27 06:25
#6
你可以尝试读取键盘设备。我曾经写过,但是程序丢了。
Reply View the author
avatar
zwq133
deepin
2018-08-27 06:52
#7
https://bbs.deepin.org/post/167935
在scanf之前getchar,是回车就break么

scanf 也是要用的,比如要配置的话就写一个数,不配置的话就按回车跳过
如果在scanf之前就getchar的话,后面的就没用了多哇!
Reply View the author
avatar
zwq133
deepin
2018-08-27 06:55
#8

这是C++?
Reply View the author
avatar
cosct
deepin
2018-08-27 07:08
#9
https://bbs.deepin.org/post/167935
scanf 也是要用的,比如要配置的话就写一个数,不配置的话就按回车跳过
如果在scanf之前就getchar的话, ...

变通一下啊,你程序回车跳过配置总要提示的吧,先print一句“回车跳过,其他任意或指定字符输入下一步”的提示,再getchar判断是否是回车,然后print配置业务,再scanf...不就OK了
Reply View the author
avatar
zwq133
deepin
2018-08-27 07:57
#10
https://bbs.deepin.org/post/167935
变通一下啊,你程序回车跳过配置总要提示的吧,先print一句“回车跳过,其他任意或指定字符输入下一步” ...

哦,在scanf前面插入一个回车就可以了!
但是又出来一个新问题:即使输入正确,报错信息都会出来刷存在感,这就纳闷了!
Reply View the author
avatar
ritter
deepin
2018-08-27 10:38
#11
本帖最后由 ritter 于 2018-8-27 02:44 编辑

#include
#include

int main(int argc, char const *argv[]) {
        std::string diankou2;
        std::cout << "配置业务vlan——电口tx2: ";
        while(std::getline(std::cin, diankou2)){
                if(!diankou2.empty()) {
                    int temp = std::stoi(diankou2);
                    if(temp < 2 || temp > 4094) {
                            std::cout << "只能输入不小于\'2\'或大于\'4094\'的数字,请重新输入。\n";
                            std::cout << "配置业务vlan——电口tx2: ";
                    }else{
                            std::cout << "Do something with temp" << std::endl;
                            break;
                    }                }else{
                    std::cout << "跳过配置!" << std::endl;
                    break;
                }
          }
        return 0;
}
Reply View the author
avatar
deepin
2018-08-27 17:15
#12
你可以c++和c混用,c++支持c
Reply View the author
avatar
zwq133
deepin
2018-08-27 17:19
#13
https://bbs.deepin.org/post/167935
你可以c++和c混用,c++支持c

C都还没学会呢,再加个C++,贪多就嚼不烂了!!
Reply View the author
avatar
cosct
deepin
2018-08-27 18:38
#14
https://bbs.deepin.org/post/167935
哦,在scanf前面插入一个回车就可以了!
但是又出来一个新问题:即使输入正确,报错信息都会出来刷存在感 ...

不会啊,你直接break,后面的语句就不会执行啊
Reply View the author
avatar
zwq133
deepin
2018-08-27 19:00
#15
https://bbs.deepin.org/post/167935
不会啊,你直接break,后面的语句就不会执行啊

break 后面是不会执行了,能正常跳出。
现在的问题是,如果不跳出循环,输入数据后,会多按一次回车键才能继续运行。
Reply View the author
Comments
wjkz
2018-08-27 20:52
scanf本来就需要回车提交数据啊
avatar
zwq133
deepin
2018-08-27 19:04
#16
本帖最后由 zwq133 于 2018-8-27 11:08 编辑
https://bbs.deepin.org/post/167935
不会啊,你直接break,后面的语句就不会执行啊

用这段代码,试试10以下的数字和错误的输入会出现什么结果
  1. #include

  2. int main(void)
  3. {
  4.     int diankou2;
  5.    
  6.     while (diankou2 < 2 || diankou2 > 4094)
  7.         {
  8.                 printf("\n配置电口tx2: ");
  9.                 if (getchar() == '\n') // 按回车跳出循环
  10.                         break;

  11.                 scanf(" %d", &diankou2);
  12.                 while (getchar() != '\n');

  13.                 if (diankou2 == 0)
  14.                 {
  15.                     printf("\n只能输入大于\'1\'或小于\'4094\'的数字,请重新输入。\n");
  16.                 }
  17.         }
  18.         
  19.         return 0;
  20. }
Copy the Code
Reply View the author
avatar
linusboyle
deepin
2018-08-27 19:40
#17
https://bbs.deepin.org/post/167935
用这段代码,试试10以下的数字和错误的输入会出现什么结果

第一,你的整数没初始化,循环有可能出bug
第二,第一次getchar之后如果不是\n,应该把得到的char放回标准输入
Reply View the author
avatar
zwq133
deepin
2018-08-27 19:51
#18
https://bbs.deepin.org/post/167935
第一,你的整数没初始化,循环有可能出bug
第二,第一次getchar之后如果不是\n,应该把得到的char放回标 ...

这是完整的文件,请帮忙看一下如何实现吧!
Reply View the author
avatar
scorcsoft
deepin
2018-08-27 20:09
#19
本帖最后由 scorcsoft 于 2018-8-27 12:10 编辑

我也写了一个,但是你的判断条件有问题

按回车直接跳出:


电口要满足不小2,且大于4094,那么要这么判断才行: diankou2 != 2 && diankou2 < 4094

输入2,合法:


既不是2,又不大于4094,不合法:


不是2,但是大于4094,合法:


这是源代码,lz可以看看:
test.c.tar




Reply View the author
avatar
linusboyle
deepin
2018-08-27 21:12
#20
本帖最后由 linusboyle 于 2018-8-27 13:14 编辑
https://bbs.deepin.org/post/167935
这是完整的文件,请帮忙看一下如何实现吧!
#include
#include

char peek() {
    char retval = getchar();
    ungetc(retval,stdin);

    return retval;
}

int main(int argc,char** argv){
    int option = INT_MAX;

    while (peek() != '\n') {
        scanf("%d",&option);

        if (option <2 || option > 4094) {
            fprintf(stderr,"only number in [2,4094] is allowed\n");
        } else {
            //do something you like
            break;
        }
        if (peek() == '\n') {
            getchar();
        }
    }

    puts("terminating");

    return 0;
}



Reply View the author
1 / 2
To page