我想在用户按两次回车时打破这个循环。也就是说,如果用户第二次没有输入字符,而只是再次按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;
}
}