gpt4 book ai didi

c - scanf 未知数的整数,如何结束循环?

转载 作者:太空宇宙 更新时间:2023-11-04 02:24:49 27 4
gpt4 key购买 nike

在类里面,我需要使用 scanf 来获取要使用的整数。问题是我不知道结束 while 循环。我在代码中等待 '\n',但它通过了所有测试。该计划必须完成才能评分。

当输入中包含多个 '\n' 和输入末尾的空格键时,如何使代码工作。

所有数字之间都用空格键给出。

# include <stdio.h>

int main()
{
int numbers;
char ch;
int stop = 0;

while(scanf("%d%c", &numbers, &ch))
{
if((ch == '\n') stop++;

#my_code

if (stop == 1) break;
}

最佳答案

while(scanf("%d%c", &numbers, &ch)) { if((ch == '\n') .... 有几个问题。

  1. 如果输入行只有像 "\n"" \n" 这样的空白,则 scanf() 直到输入非空白才会返回,因为 "%d" 消耗了所有前导空白。

    <
  2. 如果在 int 之后出现空格,则不会像在 "\n" 中那样检测到 "123 \n"

  3. int"123-456\n" 中那样丢弃 "123x456\n" 之后的非空白。


how to end loop?

寻找 '\n' 。不要让 "%d" 悄悄地消耗它。

通常使用 fgets() 读取 提供更健壮的代码,但坚持使用 scanf() 的目标是检查 '\n' 的前导空白

#include <ctype.h>
#include <stdio.h>

// Get one `int`, as able from a partial line.
// Return status:
// 1: Success.
// 0: Unexpected non-numeric character encountered. It remains unread.
// EOF: end of file or input error occurred.
// '\n': End of line.
// Note: no guards against overflow.
int get_int(int *dest) {
int ch;
while (isspace((ch = fgetc(stdin)))) {
if (ch == '\n') return '\n';
}
if (ch == EOF) return EOF;
ungetc(ch, stdin);
int scan_count = scanf("%d", dest);
return scan_count;
}

测试代码

int main(void) {
unsigned int_count = 0;
int scan_count;
int value;
while ((scan_count = get_int(&value)) == 1) {
printf("%u: %d\n", ++int_count, value);
}
switch (scan_count) {
case '\n': printf("Normal end of line.\n"); break;
case EOF: printf("Normal EOF.\n"); break;
case 0: printf("Offending character code %d encountered.\n", fgetc(stdin)); break;
}
}

关于c - scanf 未知数的整数,如何结束循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52937192/

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