这段代码是想将通过一个escape函数将输入中的字符串t复制到字符串s中,并将t中的\n、\t转义字符序列转换为实际字符。
#include<stdio.h>
void escape(char s[],char t[]);
int main()
{
char s[2000];
char t[2000];
printf(“please input your character:”);
fgets(t,2000,stdin);
puts(t);
escape(s,t);
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”\”:
switch(t[++i]){
case”n”:
s[j++] = “\n”;
break;
case”t”:
s[j++] = “\t”;
break;
default:
s[j++] = “\”;
s[j++] = t[i];
break;
}
break;
default:
s[j++] = t[i];
break;
}
}
s[j] = “\0”;
}
在这段代码中,当本人连续输入两个\之后跟上n或t,例如\n,\t,代码只识别第一个\,并输出第一个\,但是到第二个\的时候,代码不会识别下一个字符能否为n或t,导致输出结果还是原字符,\n输出\n(不会换行),\t输出\t(不会出现制表符),这是为什么呢?
#include<stdio.h>
void escape(char s[],char t[]);
int main()
{
char s[2000];
char t[2000];
printf(“please input your character:”);
fgets(t,2000,stdin);
puts(t);
escape(s,t);
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”\”:
switch(t[++i]){
case”n”:
s[j++] = “\n”;
break;
case”t”:
s[j++] = “\t”;
break;
default:
s[j++] = “\”;
s[j++] = t[i];
break;
}
break;
default:
s[j++] = t[i];
break;
}
}
s[j] = “\0”;
}
在这段代码中,当本人连续输入两个\之后跟上n或t,例如\n,\t,代码只识别第一个\,并输出第一个\,但是到第二个\的时候,代码不会识别下一个字符能否为n或t,导致输出结果还是原字符,\n输出\n(不会换行),\t输出\t(不会出现制表符),这是为什么呢?
解决方案
20
注意下表情符号前面的一个功能,那里面分不同的语言