如何使用转义序列从stdin获取字符串?

时间:2012-04-18 03:02:11

标签: c

一个简单的代码是:

#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函数知道转义序列?

4 个答案:

答案 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是一样的,会给你同样的问题。