c - 如何在输入两次之前输入?
问题描述
当用户按两次输入时,我想打破这个循环。意思是,如果用户第二次没有输入字符,而只是再次按下回车,则循环必须中断。
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 = '\0';
while ((currentChar = getchar()) != EOF)
{
if (previousChar == '\n' && currentChar == '\n')
{
printf("Two newlines. Exit.\n");
break;
}
if (currentChar != '\n')
printf("Current char: %c\n", 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: %d\n", n);
else
printf("Did not read an integer\n");
}
}
请注意,现在有一个最大行长。这对于读取单个整数是可以的,但可能不适用于解析更长的输入。
致谢:chux - 恢复 Monica建议使用int
类型并检查EOF
第一个代码片段。
推荐阅读
- pyspark - 石墨或grafana可以用来监控pyspark指标吗?
- javascript - 根据输入值自动添加表单输入字段
- angular - ngFor中的角度多个表单值
- svg - 如何从 SVG 中提取一个元素及其参考元素?
- mysql - 根据 MySQL (v8) 中的条件创建重复行
- microsoft-graph-api - Microsoft Bot Framework:任务模块
- python - 不圆列
- google-sheets - 使用 IMPORTRANGE 或 VLOOKUP 返回数据时是否无法包含字体颜色?
- ls - 我如何 ls 一个目录来获取它的数据,但没有它的文件?
- python - 如何在 Python 的列表推导中执行多个表达式?