C语言 如何获取输入,直到按两次enter键?



我想在用户按两次回车时打破这个循环。也就是说,如果用户第二次没有输入字符,而只是再次按enter键,则循环必须中断。

char ch;
while(1) {
scanf("%c",&ch);

if(ch=='') { // I don't know what needs to be in this condition
break;
}
}

在C中不可能直接检测按键,因为标准I/O函数是在终端中使用的,而不是直接响应键盘。相反,您可以使用诸如ncurses之类的库。

然而,坚持使用纯C,我们可以检测换行符。如果我们跟踪最后两个读字符,我们可以实现类似的行为,这可能对您的用例足够好:

#include <stdio.h>
int main(void)
{
int currentChar;
int previousChar = '';
while ((currentChar = getchar()) != EOF)
{
if (previousChar == 'n' && currentChar == 'n')
{ 
printf("Two newlines. Exit.n");
break;
}
if (currentChar != 'n')
printf("Current char: %cn", currentChar);
previousChar = currentChar;
}
}

编辑:看起来目标并不是检测两次输入,而是让用户:

  • 输入一个值,然后返回,或者
  • 输入return而不输入值,返回后程序退出。

一个更一般的解,也可以读取整数,可以构造如下:

#include <stdio.h>
#define BUFFER_SIZE 64U
int main(void)
{
char lineBuffer[BUFFER_SIZE];
while (fgets(lineBuffer, BUFFER_SIZE, stdin) != NULL)
{
if (lineBuffer[0] == 'n')
{
printf("Exit.n");
break;
}
int n;
if (sscanf(lineBuffer, "%d", &n) == 1)
printf("Read integer: %dn", n);
else
printf("Did not read an integern");
}
}

注意现在有一个最大行长。这对于读取单个整数是可以的,但对于解析较长的输入可能不起作用。

credit: chux - Reinstate Monica建议在第一个代码片段中使用int类型并检查EOF

您可以存储前一个字符,并将其与当前字符进行比较,然后输入,如下所示:

char ch = 'a', prevch = 'n';
while(1){
scanf("%c",&ch);
if((ch=='n') && (ch == prevch)){// don't know what needs to be in this condition
break;
}
prevch = c;
}

请注意,默认情况下,前面的字符是enter,因为我们希望如果用户一开始就按enter,程序也会停止。

现在很有魅力

char ch[10];
while(1){

fgets(ch, sizeof ch, stdin);

if(ch[0]=='n'){
break;
}



}

相关内容

  • 没有找到相关文章

最新更新