遇到一个清空输入的问题!
Tofloor
poster avatar
zwq133
deepin
2018-10-04 06:54
Author
这是一个调用ping命令的东西,第一次输入次数和字节大小后,会遗留到下一次。求解如何清空上一次的输入!
  1. #include
  2. #include
  3. #include
  4. #include

  5. char Enter();

  6. // ----------------------------- ping测试 -----------------------------
  7. void main(void) {


  8.         int    a, b, c, d;
  9.         int    frequency = 1000, bytes = 1000; // 设置ping包次数和字节大小默认值
  10.         char   len = 0, str[25], IpAddr[25], Ping_Test[45];
  11.         time_t start, end;

  12.         printf("\n输入测试ip地址,按回车退出:");
  13.         while (Enter() != '\n') {

  14.                 fgets(str, 25, stdin);
  15.                 len = strlen(str);
  16.                 if (str[len - 1] == '\n') {

  17.                         str[len - 1] = '\0';
  18.                 }
  19.                 if (sscanf(str, "%d.%d.%d.%d", &a, &b, &c, &d)==4
  20.                         && a >= 0 && a <= 255 && b >= 0 && b <= 255
  21.                         && c >= 0 && c <= 255 && d >= 0 && d <= 255) {

  22.                         sprintf(IpAddr, "%d.%d.%d.%d", a, b, c, d);
  23.                         printf("\n默认发送1000次数据包、每包1000字节 按回车使用默认值\n");
  24.                         printf("数据包次数:");
  25.                         while (Enter() != '\n') {

  26.                                 scanf("%d", &frequency);
  27.                                 if (0 >= frequency) {

  28.                                         printf("只能是大于0的数字:");
  29.                                         while (getchar() != '\n');
  30.                                 }
  31.                         } while(getchar()!='\n');

  32.                         printf("数据包大小:");
  33.                         while (Enter() != '\n') {

  34.                                 scanf("%d", &bytes);
  35.                                 if (bytes < 64 || bytes > 1005) {

  36.                                         printf("不能小于64或大于1004字节:");
  37.                                         while (getchar() != '\n');
  38.                                 }
  39.                         } while(getchar()!='\n');
  40.                        
  41.                         if (strcmp(IpAddr, str) == 0) {

  42.                                 time(&start); // 计时开始
  43.                                 sprintf(Ping_Test, "sudo ping -c%d -s%d -i0.01 %s", frequency, bytes-8, IpAddr);
  44.                                 printf("\n");
  45.                                 system(Ping_Test);
  46.                                 time(&end); // 计时结束
  47.                                 int minute = (end - start) / 60;
  48.                                 int second = (end - start) % 60;
  49.                                 printf("\n     测试完成,用时");
  50.                                 if (minute <= 0) {

  51.                                         printf("%d秒。", second);
  52.                                 }
  53.                                 else {

  54.                                         if (second < 10) {

  55.                                                 printf("%d分0%d秒。", minute, second);
  56.                                         }
  57.                                         else {

  58.                                                 printf("%d分%d秒。", minute, second);
  59.                                         }
  60.                                 }
  61.                         }
  62.                         else {

  63.                                 printf("ip地址的格式不对!");
  64.                         }
  65.                         printf("\n输入新的ip地址,按回车退出:");
  66.                 }
  67.                 else {

  68.                         printf("      该地址无效,再试一次:");
  69.                 }
  70.         }

  71.         return;
  72. }

  73. char Enter() {

  74.         char Tiao_Guo = getchar();
  75.         ungetc(Tiao_Guo, stdin);
  76.         return Tiao_Guo;
  77. }
Copy the Code


下面是运行效果 ↓ ↓ ↓

Reply Favorite View the author
All Replies
avatar
zwq133
deepin
2018-10-04 06:55
#1
顶到主页面,让更多人看见!
Reply View the author
avatar
wtz
deepin
2018-10-04 09:59
#2
本帖最后由 wtz 于 2018-10-4 02:00 编辑

在最外层的循环开头给frequency和bytes赋值(默认值)。
Reply View the author
avatar
老陌
deepin
2018-10-04 17:20
#3
这是干什么用的? 用shell写不是更方便。。
Reply View the author
avatar
zwq133
deepin
2018-10-04 18:54
#4
https://bbs.deepin.org/post/169516
在最外层的循环开头给frequency和bytes赋值(默认值)。

我屮艸芔茻,把初始赋值换到循环里面一下就懂了~,白瞎了研究老半天的清空输入~~。。。
Reply View the author
avatar
zwq133
deepin
2018-10-04 19:11
#5
本帖最后由 zwq133 于 2018-10-4 11:12 编辑
https://bbs.deepin.org/post/169516
这是干什么用的? 用shell写不是更方便。。

这是一个调用ping命令的程序,用来测试网络联通状况的,等同直接使用ping命令。只是能会少敲一点键盘而已,顺便给其他程序其他功能调用一下。

shell确实方便,改起来也容易些,不用编译啥的。也不用关心赋值啥的。
不过,C是基础啊,虽然不是专业靠写程序吃饭,不需要太基础的东西,知其然就行了。
但是我一直认为学点基础的东西,知其然,若能知其所以然就更好了!
原先买了一本python的书,看了一部分,后面的直接看不懂了,包括学习shell的时候也一样。
当然最奇葩的是看到很多人都在黑C,说它多么复杂繁琐,多么的不讨人喜,然而它几十年如一日的强势霸榜让我很好奇,于是最终选了C,虽然它更麻烦一点!!
这是一条知乎问答,你可以看一下:https://zhuanlan.zhihu.com/p/22779532
Reply View the author
avatar
老陌
deepin
2018-10-04 23:12
#6
https://bbs.deepin.org/post/169516
这是一个调用ping命令的程序,用来测试网络联通状况的,等同直接使用ping命令。只是能会少敲一点键盘而已 ...

我一直没有时间学习C语言。shell也忘光了,现在正在攻克小说。
Reply View the author