一个简单的代码是:
#include <stdio.h>
int main() {
printf("Hello\tworld");
char line[1000];
gets(line);
printf("%s\n",line);
return 0;
}
因此,如果我输入“Hello \ tworld”,它将打印出“Hello \ tworld”,但是预定义的字符串“Hello \ tworld”将打印出来:
hello world
有没有办法让gets函数知道转义序列?
答案 0 :(得分:2)
当你在stdin中键入“\ t”时,你得到的是你输入的内容,它被存储为'\'
和't'
而不是等同于'\t'
的ascii。为什么你不使用stdin中\t
的“tab-key”?
答案 1 :(得分:1)
printf上的字符串(“Hello \ tworld”); 它由编译器转换为编译字符串,其中转义码转换为字符,因此printf函数在执行时看不到两个char“\ t”字符串,而是单个制表字符的等效代码。但是gets()函数在运行时获取每个类型字符的字符串,并且不转换转义码。因此,如果你想转换这些转义码,你必须做一个替换函数。
答案 2 :(得分:0)
不是我知道的。您需要手动将转义字符序列的出现替换为相应的字符
答案 3 :(得分:0)
gets函数不查看任何符号(例如:\ t \ n),只给出输入的每个字符的ascii。据我所知,除了手动更换你关心的那些之外,没有办法让它注意这些。 scanf是一样的,会给你同样的问题。