【问题标题】:given a list of numbers, find the first and last times a certain number is entered给定一个数字列表,找出输入某个数字的第一次和最后一次
【发布时间】:2026-02-07 21:45:02
【问题描述】:

我需要创建一个程序,当用户输入整数列表时,查找该数字的第一个和最后一个条目的位置,以及该特定数字出现的次数。

正确的输出应该是这样的:

Enter a number to find: 4
Enter a list of numbers (negative to quit): 1 8 4 9 3 4 4 8 2 4 10 3 4 2 4 -1
This list contains 15 numbers.
First occurrence of '4': 3
Last occurrence of '4': 15
Quite a few were found!

除了一件事之外,我的表现很好:因为我每次都使用 scanf 来接收用户输入,而不是将所有数字放在一行上,如下所示:

1 8 4 9 3 4 4 8 2 4 10 3 4 2 4 -1

这样做:

1
8
4
9
3
4
4

等等

有没有什么办法让它在每个条目开始一个新行?

【问题讨论】:

  • 现在可能由用户决定。只需将它们全部写在一行上,它应该可以工作。
  • 一次读一个应该没问题,即使所有输入都在同一行,用空格隔开。 See it live 一个超级简单的例子。

标签: c scanf


【解决方案1】:

是的,如果您在 printf 格式字符串中使用 \n,它将换行。如果你没有那个角色,它就不会。所以把它拿出来,在你的循环之后写一个新行

同样,当您在提示符处输入数字时,不要在每个数字后按 enter。看起来您应该输入它们以空格分隔。

鉴于您想在输入的同一行显示提示文本,您可能还需要刷新输出:

printf( "Enter a list of numbers (negative to quit): " );
fflush( stdout );

// Input loop.
int num;
do {
    if( 1 != scanf( "%d", &num ) ) {
        fprintf( stderr, "Bad input\n" );
        exit(1);
    }

    // Do something with the input...

} while( num != -1 );

【讨论】:

  • 这表明我对编程的无知。你是绝对正确的,用户应该在同一行输入所有内容。它完美地工作。我的错,谢谢你的帮助。
最近更新 更多