user-0 提问: 函数的调用问题，求大神救急，在线等！

回复:
user: user-1
content: 引用 5 楼 caine12345 的回复:[quote=引用 4 楼 cfjtaishan 的回复:] #include<stdio.h>  void escape(char s[],char t[]);  int main() {     int c;     char s[32];     char t[32];      printf("plese input you arr:");     fgets(t, 32, stdin);     //scanf("%s", t);     puts(t);     escape(s, t);          printf("%s", s);         /*     while ((c = getchar()) != EOF) {         printf("%s",s);     }     */      return 0; }   void escape(char s[],char t[]) {     int i, j;      for(i = j = 0; t[i] != '\0'; i++){         switch (t[i]){             case '\n':                 s[j++] = '\\';                 s[j++] = 'n';                 break;              case '\t':                 s[j++] = '\\';                 s[j++] = 't';                 break;              default:                 s[j++] = t[i];                 break;         }     }     s[j] = '\0'; }  escape函数没有问题，不过scanf不能输入\t和\n到缓存里。建议使用fgets函数。另外， 之所以会出现多次输出，是因为while循环导致的。  谢谢！不过为什么scanf不能输入\t 、\n到缓存里呢？[/quote] scanf若同时输入多个变量时，是以空格（也可以多个空格）做了间隔区分的，所以\t是多个空格，也就是不能输入的； 另外，标准输入是行缓冲，输入\n标志输入结束；

user: user-1
content: #include<stdio.h>  void escape(char s[],char t[]);  int main() {     int c;     char s[32];     char t[32];      printf("plese input you arr:");     fgets(t, 32, stdin);     //scanf("%s", t);     puts(t);     escape(s, t);          printf("%s", s);         /*     while ((c = getchar()) != EOF) {         printf("%s",s);     }     */      return 0; }   void escape(char s[],char t[]) {     int i, j;      for(i = j = 0; t[i] != '\0'; i++){         switch (t[i]){             case '\n':                 s[j++] = '\\';                 s[j++] = 'n';                 break;              case '\t':                 s[j++] = '\\';                 s[j++] = 't';                 break;              default:                 s[j++] = t[i];                 break;         }     }     s[j] = '\0'; }  escape函数没有问题，不过scanf不能输入\t和\n到缓存里。建议使用fgets函数。另外， 之所以会出现多次输出，是因为while循环导致的。

user: user-2
content: 你把函数的参数改成引用形。

user: user-0
content: 引用 4 楼 cfjtaishan 的回复:#include<stdio.h>  void escape(char s[],char t[]);  int main() {     int c;     char s[32];     char t[32];      printf("plese input you arr:");     fgets(t, 32, stdin);     //scanf("%s", t);     puts(t);     escape(s, t);          printf("%s", s);         /*     while ((c = getchar()) != EOF) {         printf("%s",s);     }     */      return 0; }   void escape(char s[],char t[]) {     int i, j;      for(i = j = 0; t[i] != '\0'; i++){         switch (t[i]){             case '\n':                 s[j++] = '\\';                 s[j++] = 'n';                 break;              case '\t':                 s[j++] = '\\';                 s[j++] = 't';                 break;              default:                 s[j++] = t[i];                 break;         }     }     s[j] = '\0'; }  escape函数没有问题，不过scanf不能输入\t和\n到缓存里。建议使用fgets函数。另外， 之所以会出现多次输出，是因为while循环导致的。  谢谢！不过为什么scanf不能输入\t 、\n到缓存里呢？

user: user-0
content: 引用 1 楼 hdt 的回复:你这个程序有问题，比如原字符串abc\ncde; 按照你的程序将变为abc\nde 其次 \\ 变为 \ n=》n 因此你的程序里面\ n 是两个字符 而\n是一个字符 那请问该怎么解决呢？我需要修改哪部分代码？

user: user-3
content: 你这个程序有问题，比如原字符串abc\ncde; 按照你的程序将变为abc\nde 其次 \\ 变为 \ n=》n 因此你的程序里面\ n 是两个字符 而\n是一个字符