user-0 提问: 这段代码怎么改才能把去掉空格后的全输出

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  void deblack( char *p , char *q) {     while (*p) {         if(*p == ' ')             p++;         else             *q++ = *p++;     }     *p = 0; }  void main() {     FILE *fp ;     char str[100] , str1[100];      fp = fopen("a" , "r");     if (!fp)         return;     while(!feof(fp))     {         fgets(str, 100, fp);         deblack(str, str1);         printf("%s" , str1);     }     fclose(fp); } 参考一下吧

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:void main() {     FILE *fp ;     char str[100] , str1[100];     fp = fopen("a" , "r");     while(1)  {         if (NULL==fgets(str , 100 , fp)) break;         deblack( str , str1);         printf("%s\n" , str1);     }     fclose(fp); } 欸，大叔，你这个方法也行耶，那说明我的问题出在没有结束while的判断，所以会出问题。

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:#include <stdio.h> void delblank( char *p , char *q) {     char c,f;     f=1;     while (1) {         c=*p;         if (0==c) {             *q=0;             break;         }         if (f) {             if ('#'==c) {                 f=0;                 *q='\t';                 q++;                 *q=*p;                 q++;             } else if (!(' '==c || '\t'==c)) {                 *q=*p;                 q++;             }         } else {             *q=*p;             q++;         }         p++;     } } int main() {     char str[100]="           ip         =  192.168.219.136                 #这是ip" , str1[100];     delblank(str,str1);     printf("%s\n",str1);     return 0; } //ip=192.168.219.136      #这是ip // 谢谢，好厉害，我以后要是也能这样就好了

user: user-2
content: void main() {     FILE *fp ;     char str[100] , str1[100];     fp = fopen("a" , "r");     while(1)  {         if (NULL==fgets(str , 100 , fp)) break;         deblack( str , str1);         printf("%s\n" , str1);     }     fclose(fp); }

user: user-0
content: fgets是一行一行的读，一行一行的传给deblack（*q = '\0';   的用是在每行后面都加\0结束），然后用while (!feof(fp))这个循环把每行都这样遍历一遍     ，     这样理解对吗？

user: user-3
content: #include <stdio.h> #include <stdlib.h> #include <string.h>   void deblack(char* p, char* q) {     while (*p) {         if (*p == ' ')             *p++;         else             *q++ = *p++;     }     *q = '\0';  ///需要把字符串封闭掉  }   int main() {     FILE* fp ;     char str[100], str1[100];     fp = fopen("a.txt", "r");     while (!feof(fp)) {         fgets(str, 100, fp); /// fgets  读取换行的         deblack(str, str1);         printf("%s", str1);      }     fclose(fp); }  在楼主的代码上改吧

user: user-3
content: ﻿#include <stdio.h> #include <stdlib.h> #include <string.h>   char* deblack(char* src)    // 删除C风格字符串中的空格 {     char* ret = src;     char* fp = src;     while (*src) {         if (*src != ' ') { // 如果不是空格就复制             *fp = *src;             fp++;         }         src++;     }     *fp = '\0' ; //封闭字符串     return ret; }   int main() {     FILE* fp ;     char str[100];     fp = fopen("a.txt", "r");     while (!feof(fp)) {         fgets(str, 100, fp);         printf("%s\n", deblack(str));     }       fclose(fp); }   楼主的代码 少了  *fp = '\0' ; //封闭字符串

user: user-2
content: #include <stdio.h> void delblank( char *p , char *q) {     char c,f;     f=1;     while (1) {         c=*p;         if (0==c) {             *q=0;             break;         }         if (f) {             if ('#'==c) {                 f=0;                 *q='\t';                 q++;                 *q=*p;                 q++;             } else if (!(' '==c || '\t'==c)) {                 *q=*p;                 q++;             }         } else {             *q=*p;             q++;         }         p++;     } } int main() {     char str[100]="           ip         =  192.168.219.136                 #这是ip" , str1[100];     delblank(str,str1);     printf("%s\n",str1);     return 0; } //ip=192.168.219.136      #这是ip //

user: user-0
content: 再问一下，在怎样改进能使注释符（#） ， 前加上'\t'  或不删除其前的空格  加入"a"的内容是            ip         =  192.168.219.136                 #这是ip   最后能输出 ip=192.168.219.136                   #这是ip