gpt4 book ai didi

C - 按回车键退出循环

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:40 26 4
gpt4 key购买 nike

我正在尝试从数组中打印一串字符,并在每次按下“Enter”键时结束循环。

int i;
char charArry[MAXARY];

printf("Input an array of chars: \n\n");

for (i = 0; i < MAXARY && charArry[i] != 13; i++)
{
scanf(" %c", &charArry[i]);
}

for (i = 0; i < MAXARY; i++)
{
printf(" %c", charArry[i]);
}

出于某种原因,每当我按下 Enter 键时,它只会换行而不是中断循环。有什么建议吗?

附言MAXARY 是数组长度的常量,当前为 20。

最佳答案

您即将完成这项工作。虽然我同意应避免使用 scanf,但请参阅:Why does everyone say not to use scanf? What should I use instead? ,您的程序未按预期执行的原因是逻辑错误。

您的 for 循环状态:

for (i = 0; i < MAXARY && charArry[i] != 13; i++)

现在回顾一下 for 循环的工作原理,您有:

1. initalization (i=0)
2. conditional check (i < MAXARY && charArry[i] != 13)
3. conditional block (scanf)
4. increment (i++)
5. return to 2

您会注意到您的 charArray[i] != 13 检查发生在 i 递增之后。因此,您不是检查刚刚读取的字符,而是检查 charArray[i] 中的下一个字符。这就是为什么您永远不会在 \r 字符处中断循环。

推荐的修复方法是:

for (i = 0; i < MAXARY; i++)
{
int result = scanf("%c", &charArry[i]);
if( result != 1 || charArry[i] == '\n' )
break;
}

i 是被读取的字符时,检查 scanf 是否成功和 charArry。

另请注意 chux已指出 \r 字符是回车符,而不是换行符。因此,此检查仅在您在 Windows 上工作时才有效(因为 unix 不使用 \r)。如果您想独立于平台,请使用 \n

关于C - 按回车键退出循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41110083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com