c - 如何使用scanf获取换行符?

标签 c scanf

我正在尝试创建一个简单的类似记事本的程序来输入命令提示符。但是不能通过使用 scanf() 函数按“Enter”准确地到达下一行。

#include<stdio.h>
void main ()
{
char c;
for(;;){
        scanf("%c", &c);
   if(c == "\n"){
        printf("\n");
        }
   else{
        printf("%c", c);
        }
}
}

(我知道 scanf() 将新字符留在缓冲区中。我已尽力解决这个问题。在 scanf() 之后使用了 getch() 函数,但我无法使其工作。我必须通过 scanf() 函数了解这个问题,所以我想避免使用字符串或其他方法等替代方法)

最佳答案

嗯,你有点不幸。这是 C 编程初期的一个流行问题。在 C 中, '\n'"n" 之间存在巨大差异。第一个是单字符,所以 '\n' 的类型是 char 。另一个是字符串,C中的字符串就是char[]。这意味着实际上 "\n" = ['\n', '\0'] 作为字符串以 '\0' 中的 C 终止。

另一件事是,scanf 忽略前导白色符号,新行是白色符号。如果你想获得更多字符,请改用 fgets。对于单字符的读取,scanf还是可以的。

这在 this 堆栈溢出主题中有广泛描述。

#include<stdio.h>
void main () {
    char c;
    for(;;){
        scanf("%c", &c);
       if(c == '\n'){
           printf("\n");
       } else{
             printf("%c", c);
       }
    }
}

关于c - 如何使用scanf获取换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38916729/

相关文章:

c - 查找最大和最大负数的程序

c - 将 realloc() 返回的地址分配给同一个指针是好的编码习惯吗?

c - scanf 跳过扫描字符

python - 用于匹配固定宽度的 float 的正则表达式

c++ - 如何初始化和定义指向二维数组的指针?

c - 在添加到动态数组时转义循环 - C

c - 子进程错过的信号

c++ - fscanf 符合条件

c - Netbeans 8.1 scanf() 函数无法正常工作

c - 使用 sscanf 读取字符串