exercise.7-3.<The C programming Language>.Page136
Big Integer 失败啊......

exercise.7-2.<The C Programming Language>.Page 136

TLHL28 posted @ Sun, 03 Aug 2008 02:47:20 +0800 in C语言 with tags C语言 , 1513 readers

呃......这个的也和那个答案不一样。测试了一下答案,对输入没作什么处理啊,输出没改变......不知道是不是我哪搞错了。我比答案少一个功能,检测是否是图形字符。简述完毕!

  1. /* 编写一个程序,以合理的方式打印任何输入。该程序至少能够根据用户的习惯
  2. * 以八进制或十六进制打印非图形字符,并截断长文本行。
  3. * Usage: cat filename.txt | ./print_type -t 8/16;
  4. * exercise.7-2.<The C Programming Language>.Page 136.
  5. * */
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9.  
  10. enum {EIGHT, SISTEEN, GENERAL}; /*打印模式*/
  11.  
  12. #define LENGTH 10 /*指定长文本行的字符个数范围*/
  13.  
  14. /*print_type 函数: 根据获取的参数打印模式打印字符*/
  15. int print_type(int);
  16.  
  17. int main(int argc, char **argv)
  18. {
  19.     int flag;
  20.     int istype = 0;
  21.     char *p;
  22.  
  23.     while (--argc > 0 && *(++argv)[0] == '-')
  24.         while ((flag = *++argv[0]))
  25.             switch (flag) {
  26.                 case 't':
  27.                     istype = 1;
  28.                     break;
  29.                 default:
  30.                     printf("Error: Can't find the argument!\n");
  31.                     break;
  32.             }
  33.     if (argc != 1 && argc != 0)
  34.         printf("Usage:.............\n");
  35.     else if (istype) {
  36.         p = *(argv);
  37.         if ( strcmp(p,"8") == 0)
  38.             print_type(EIGHT);
  39.         else if (strcmp(p,"16") == 0)
  40.             print_type(SISTEEN);
  41.         else
  42.             printf("Error: Can't find the type!\n");
  43.     } else if (istype == 0)
  44.         print_type(GENERAL);
  45.     return 0;
  46. }
  47.  
  48. int print_type(int type)
  49. {
  50.     int c;
  51.     int len = 0;
  52.  
  53.     while ((c = getchar()) != EOF) {
  54.         ++len;
  55.         if (c == '\n') {
  56.             putchar(c);
  57.             len = 0;
  58.         } else if (c != '\n')
  59.             switch (type) {
  60.                 case EIGHT:
  61.                     printf ("%o",c);
  62.                     break;
  63.                 case SISTEEN:
  64.                     printf("%x",c);
  65.                     break;
  66.                 case GENERAL:
  67.                     putchar(c);
  68.                     break;
  69.                 default:
  70.                     return -1;
  71.             }
  72.         if (len >= LENGTH) {
  73.             printf("\n");
  74.             len = 0;
  75.         }
  76.     }
  77.     return 0;
  78. }

Login *


loading captcha image...
(type the code from the image)
or Ctrl+Enter