|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
练习 1-21 编写程序entab,将空格串替换为最少数量的制表符和空格,但要保持单词之间的间隔不变
下面的代码是不是不对,应该不能直接把8个空格替换为制表符啊
- #include<stdio.h>
- #define MAX_ARRAY 1024
- #define TAB 8
- int getlines(char array[] , int maxlen);
- int main()
- {
- char array[MAX_ARRAY];
- int c,k,i;
- int len;
- int spacenum=0;
- while ((len = getlines(array,MAX_ARRAY)) > 0)
- {
- for ( i = 0; i < len; i++)
- {
- if (c==' ')
- {
- spacenum++;
- }
- if (c!=' ')
- {
- spacenum=0;
- }
- if (spacenum==TAB)
- {
- i-=7;
- len-=7;
- array[i] = '\t';
- for ( k = i+1; k< len; k++)
- {
- array[k] = array[k+3];
- }
- spacenum = 0;
- array[len]='\0';
- }
- }
- printf("%s",array);
- }
- return 0;
- }
- int getlines(char array[] , int maxlen)
- {
- int i,c;
- for ( i = 0; i < maxlen-1 && (c=getchar())!=EOF && c!='\n'; i++)
- {
- array[i] = c;
- }
- if (c=='\n')
- {
- array[i] = c;
- i++;
- }
-
- array[i] = '\0';
- return i;
-
- }
复制代码
从上到下看代码,这次我只关心main函数中的变量 c
第8行没有出现c
第9行声明了 c,但是没有初值
第10行没有
第11行没有
第12行没有
第13行没有
第14行没有
第15行没有
第16行没有
第17行有一个 c==' '
那么问题来了,这个if条件成立吗?
答案是不知道,因为真的是不知道,不知道变量 c 的位置之前是什么
因为没有初始化,所以可以看成是 还是之前的值,但是我们不知道之前的值是什么
另外,给你个代码参考
- #include <stdio.h>
- #define TAB 8
- int main(void) {
- char buf[4096];
- while(fgets(buf, 4096, stdin)) {
- int cols = 0;
- for(int i = 0; buf[i]; ++i) {
- if(buf[i] == '\t') {
- int count = TAB - (cols % TAB);
- if(count == 0) count = TAB;
- cols += count;
- while(count--)
- putchar(' ');
- } else {
- putchar(buf[i]);
- ++cols;
- }
- }
- }
- return 0;
- }
复制代码
|
|