我正在尝试创建一个简单的类似记事本的程序来输入命令提示符。但是不能通过使用scanf()函数按"Enter"键准确地到达下一行。
#include<stdio.h>
void main ()
{
char c;
for(;;){
scanf("%c", &c);
if(c == "n"){
printf("n");
}
else{
printf("%c", c);
}
}
}
(我知道scanf()将新字符留在缓冲区中。我已经尽了最大的努力来解决这个问题。使用getch()函数之后比scanf(),但我不能使它工作。我必须理解scanf()函数的这个问题所以我想避免使用string或其他选项
好吧,你有点不幸。这是C编程开始时的一个流行问题。在C
中,'n'
和"n"
之间存在巨大差异。第一个是单字,所以'n'
的类型为char
。另一个是字符串,C
中的字符串是char[]
s。这意味着实际上"n" = ['n', ' ']
作为字符串以C
中的' '
结束。
另一件事是,scanf
忽略前导白色符号,新行是白色符号。如果您想获得更多字符,请使用fgets
。对于读取单个字符,scanf仍然可以。
这在本堆栈溢出主题中有广泛的描述。
#include<stdio.h>
void main () {
char c;
for(;;){
scanf("%c", &c);
if(c == 'n'){
printf("n");
} else{
printf("%c", c);
}
}
}
我认为最好使用getch()
来实现您想要实现的任何目标。
while(1){
int i = getch();
if(i==13) printf("n");
// [Maybe an else if ladder for different shortcuts/keys...]
else printf("%c",i);
}
我知道我迟到了,但我希望这个答案能让将来读到它的人受益。