用getchar()输入字符串 转义
时间: 2024-03-23 16:33:09 浏览: 81
```c
#include <stdio.h>
int main() {
char str[100];
int i = 0;
while ((str[i] = getchar()) != '\n') {
i++;
}
str[i] = '\0';
printf("输入的字符串是:%s\n", str);
return 0;
}
```
```c
#include <stdio.h>
int main() {
char str[100];
fgets(str, 100, stdin);
printf("输入的字符串是:%s\n", str);
return 0;
}
```
相关问题
描述 C程序的注释用/*...*/来表示。请写一个程序,将输入的C程序源代码中的注释去掉,输出去掉注释之后的源代码。 用于测试的C代码保证符合语法,不使用C++的//注释语法。 注意,C语言不允许出现嵌套注释。具体来说,对于/*/**/"*/",如果不允许嵌套注释,那么它表示字符串"*/";如果允许嵌套注释,它表示一个引号"。 还请注意,字符串中出现的注释符/*属于字符串的一部分,注释中出现的双引号"属于注释的一部分。 输入 符合语法的C代码文本文件。代码每行不超过200个字符。 输出 去掉注释后的C代码。要求只能去掉注释,不可以做其他的修改,比如调整缩进,去除注释之外的换行符等。 提示 注意字符串,字符,转义字符的情况。 看看自己有没有考虑 "a\"/*ccc*/" 这种情况。
以下是一个可能的解法,使用状态机来处理不同的注释和字符串状态:
```c
#include <stdio.h>
enum State {
NORMAL,
IN_STRING,
IN_COMMENT,
IN_COMMENT_STAR
};
int main() {
enum State state = NORMAL;
char c, prev_c = '\0';
while ((c = getchar()) != EOF) {
switch (state) {
case NORMAL:
if (c == '"') {
state = IN_STRING;
} else if (c == '/' && prev_c == '/') {
// 单行注释
putchar(prev_c);
state = IN_COMMENT;
} else if (c == '/' && prev_c == '*') {
// 结束多行注释
state = NORMAL;
} else if (c == '*') {
state = IN_COMMENT_STAR; // 可能开始多行注释
} else {
putchar(c);
}
break;
case IN_STRING:
putchar(c); // 字符串中的所有内容都不处理
if (c == '"' && prev_c != '\\') {
state = NORMAL;
}
break;
case IN_COMMENT:
if (c == '\n') {
putchar(c);
state = NORMAL;
}
break;
case IN_COMMENT_STAR:
if (c == '/') {
// 结束多行注释
state = NORMAL;
} else if (c == '*') {
// 继续多行注释
state = IN_COMMENT_STAR;
} else {
// 恢复正常状态
state = NORMAL;
putchar(prev_c);
putchar(c);
}
break;
}
prev_c = c;
}
return 0;
}
```
这个程序使用了一个 `enum` 类型来表示不同的状态,并使用 `switch` 语句来根据状态进行处理。在每个状态中,程序根据当前字符和前一个字符的情况来判断是否需要转换状态或输出字符。需要注意的是,对于多行注释中出现的 `*/`,可能需要特殊处理。
c语言读取字符串时遇到不可打印字符
在 C 语言中,当你尝试从输入流(如标准输入、文件或网络)读取字符串时,可能会遇到不可打印字符,例如控制字符(如换行符、制表符等),转义序列(如`\n`表示换行),或者是二进制数据。当遇到这类字符时,直接打印到终端通常会显示为特殊的字符或者方框。
处理不可打印字符的一种常见做法是在读取字符串时跳过它们,只存储可见的ASCII字符。你可以使用 `isprint()` 函数检查字符是否是可打印的,如果是,则添加到结果字符串中。这里是一个简单的示例:
```c
#include <stdio.h>
#include <ctype.h>
#define MAX_LENGTH 100
char read_string(char *str) {
int i = 0;
char ch;
while ((ch = getchar()) != '\n') { // 或者其他终止条件,比如 EOF
if (isprint(ch)) { // 检查是否是可打印字符
str[i++] = ch; // 如果是,将其添加到字符串中
}
}
str[i] = '\0'; // 添加空字符作为字符串结束标志
return str;
}
int main() {
char input[MAX_LENGTH];
printf("Enter a string: ");
fgets(input, sizeof(input), stdin); // 使用fgets避免包括行尾'\n'
input[strcspn(input, "\n")] = '\0'; // 清除行尾的换行符
read_string(input); // 调用上面定义的函数过滤不可打印字符
printf("Filtered string: %s\n", input);
return 0;
}
```
在这个例子中,程序会忽略所有不可打印字符,并将用户输入的可打印字符存储到字符串中。
阅读全文