美文网首页
2014年第七题

2014年第七题

作者: Tyihou | 来源:发表于2017-10-08 16:48 被阅读0次
    image.png
    #include<stdio.h>
    #pragma warning(disable:4996)
    //这个你不用管,这个只是一个和编译器有关的语句,考试的时候不用写
    int main() {
      char buf[1024],str[128];
      //声明一个buf总字符数组,然后声明一个str的临时字符数组
      buf[0] = 0;
      //这一步是为了清空字符串,只要把字符数组的开始字符置为0,系统就会认为这个字符串为一个空串为了在接下来比如说一些strlen函数的时候,能够不出错,
      int i,n,m=5;
      printf("请输入一个整数M:");
      scanf("%d", &m);
      //fflush(stdin);   /*清空缓冲区,也可以使用rewind(stdin);*/
      //使用setbuf(stdin,null);可以使stdin输入流由默认缓冲区转为无缓冲区,这样scanf输入完毕后,缓冲区内的东西就消失了。
      //setbuf(stdin, NULL);
    
      int c;
      while ((c = getchar()) != '\n' && c != EOF);
      /*前边的这两句是一个清楚缓冲区的操作,应为在调用一些输入函数时,比如scanf、gets、getchar、getc、fgetc的时候,没有读取的字符比如说换行符,
      就会一直存在输入缓冲区stdin里边,这样在下次再调用其他输入函数时候,就会读取以前缓冲区中的字符,而出现意向之外的情况,所以这里进行一个清空操作
      而清空操作有好几种方法,fflush(stdin)这个函数在一些平台上会不起作用,所以不推荐用,setbuf(stdin,null)是关闭缓冲区的意思,也能起到效果,但是不建议
      最好的就是用c语言语句实现缓冲区清空, while ((c = getchar()) != '\n' && c != EOF);这句话的意思是,从缓冲区持续读入字符,直到遇到换行或者结束符为止,
      这样就起到了清空缓冲区的作用!
      */
      printf("请输入字符串:");
      //这个程序的逻辑很好理解,就是用一个while循环一直读取字符串,直到遇见end的时候,就会终止读取并且调用show函数,输出
      while (1) {
          gets(str);
          n = strlen(str);
          int f = strcmp(str, "end");
          //使用strcmp函数判断是否相等,宝贝,我建议你看一下这个函数,包括这个函数返回的数据,
          /*设这两个字符串为str1,str2,
          调用strcmp(str1,str2)时
          若str1 == str2,则返回零;
          若str1<str2,则返回负数;
          若str1>str2,则返回正数。*/
          if (f == 0) {
              show(buf,m);
              break;
          }
          int num = strlen(buf);
          if (n>(1024 - num)) break;
          //这一步判断buf中还能不能存入这些字符,如果能的话,就继续存,如果不能就退出循环,程序结束..
          strcat(buf, str);
          //把临时字符串str中的字符串追加到buf中,然后把str字符数组清空
          str[0] = 0;
          printf("您已经输入%3d个字符,请继续输入字符串:",strlen(buf));
          //这里的%3d的意思是按整形输出但是至少占三个位,这样就起到的输出的字符长度看起来大小一样的效果
      }
      system("pause");
      return 0;
    }
    
    int show(char buf[],int m) {
      int n,i,s;
      n = strlen(buf);
      if (n<=m)
          //根据题意判断buf字符数组的长度与m的长度
      {
          printf("您输入的的M的值为%d,大于或等于buf中的字符个数%d,所以输出全部%d个字符为:", m, n, m);
          for (i=0;i<n;i++)
          {
              printf("%c", buf[i]);
          }
          printf("\n");
      }
      else
      {
          printf("您输入的的M的值为%d,小于buf中的字符个数%d,所以输出最后%d个字符为:", m,n,m);
          for (i = n-m; i <= n; i++) {
              printf("%c", buf[i]);
          }
          printf("\n");
      }
    }
    
    image.png

    相关文章

      网友评论

          本文标题:2014年第七题

          本文链接:https://www.haomeiwen.com/subject/euxyyxtx.html