2014年第七题

2017-10-08  本文已影响0人  Tyihou
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
上一篇下一篇

猜你喜欢

热点阅读