如何使用scanf获取换行符?

Far*_*uad 1 c scanf

我试图创建一个简单的类似记事本的程序以在命令提示符下键入。但是不能完全通过使用scanf()函数按“ Enter”键进入下一行。

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

(我知道scanf()将新的char留在缓冲区中。我已经尽力摆脱了这个问题。比scanf()之后使用了getch()函数,但我无法使其正常工作。我必须了解这个问题使用scanf()函数,因此我想避免使用字符串或其他方法)

xen*_*ros 5

好吧,你有点不幸。在C编程的开始阶段,这是一个普遍的问题。在C之间存在巨大的差异'\n'"n"。第一个是单个字符,因此类型'\n'char。另一个是字符串,in Cchar[]的字符串是s。这意味着实际上"\n" = ['\n', '\0']字符串以'\0'in 结尾C

另一件事是,它scanf忽略了前导白标,而换行符是白标。如果要获得更多字符,请fgets改用。对于阅读单个字符,scanf仍然可以。

堆栈溢出主题中对此进行了广泛描述。

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

  • 注意,对于“%c”格式,“ scanf”不会跳过空格。 (2认同)