找到最小int(C)的函数

时间:2015-09-03 21:55:04

标签: c function loops integer

我是C编程的初学者,我正在尝试创建一个输入数字并找到最小数字并显示它的函数。到目前为止,我做了这个但它不起作用:

int smallest(){
  int tyy;
  for(tyy=0; tyy<11;tyy++){
    int small;
    int numbers;
    printf("input numbers");
    scanf("%d", &numbers);
    int blockloop;
    while ((blockloop=getchar()) != EOF && blockloop != '\n');
    if (numbers<small){
      numbers = small;
      printf("\n",numbers);
    }
  }
  return 0;
}

然而这不起作用,无论我输入哪个号码,只需要11次查询数字,然后返回主函数。我不确定我所做的是否正确。

编辑(但不打印正确的数字)

  int smallest(){
  int tyy;
  for(tyy=0; tyy<11;tyy++){
    int small;
    int numbers;
    printf("input numbers");
    scanf("%d", &numbers);
    int blockloop;
    while ((blockloop=getchar()) != EOF && blockloop != '\n');
    if (numbers<small){
      small=numbers;
      printf("%d\n",numbers);
    }
  }
  return 0;
}

使用的输入值为1到11;打印结果是11。 谢谢!

5 个答案:

答案 0 :(得分:3)

这段代码没有做任何我能看到的高效工作。它似乎只是循环,直到用户输入EOF或\ n。

while ((blockloop=getchar()) != EOF && blockloop != '\n');

在此代码中

if (numbers<small){
  numbers = small;
  printf("\n",numbers);
}

作业应该是

  small = numbers;

另外

printf("\n",numbers);

实际上并没有输出您的号码。将其更改为

printf("%d\n",numbers);

您需要将small初始化为最大整数。

#include <limits.h>
...
int small = INT_MAX;

答案 1 :(得分:2)

好!我设法修复了你的代码,它很简单,所以我希望你能理解你所犯的错误:
1。你在for循环中定义了int小数字和int数字,这意味着它们生活在for和for,并且每次再次启动时都会死掉,这就是一个范围。您必须在范围外声明变量。
2。您在if语句中打印,这意味着它将打印您刚刚输入的数字。
3。你没有初始化变量。你应该总是这样做,特别是如果你要比较它们。当你进行这种程序时,你应该将small初始化为最小整数,以便它尽可能地工作。
4。我也修改了while,如果你输入了一个char或者某个不是数字的东西,你只是跳过一个数字,你就不会再问这个数字,所以我在其中添加了另一个scanf,这也可以做到与goto。


我想是的!这是代码:

#include <limits.h> 

int smallest(void) {
  int tty, small = INT_MAX, numbers, blockloop;
  for(tty = 0; tty < 11; ++tty) {    
    printf("Input numbers:\n");
    scanf("%d", &numbers);

    while ((blockloop=getchar()) != EOF && blockloop != '\n') {
        scanf("%d", &numbers);
    }

    if(numbers < small) {
      small = numbers;
    }
  }
  printf("Smallest: %d\n", small);
  return 0;
}

如果您有任何疑问,请告诉我!

编辑:小心风格,整洁的代码是简单的代码,如果代码组织良好,你可以更快地发现错误。另一个,你应该使用名称&#39; i&#39;对于for循环中的变量,它只是常规变量。当事情不清楚时,也习惯于评论你的代码。最后,当你发现错误尝试运行代码时,你可以很快发现一些简单的错误。

答案 2 :(得分:0)

需要将最小值设置为INT_MAX。也使用limits.h

doc.loadUrl("javascript:" + /* ALL the javascript code above */);

答案 3 :(得分:0)

您应该在使用之前初始化int变量。

small具有不确定的值,因为它未初始化,因此您的程序无法判断if语句中的numbers是否小于small

 if (numbers < small)
需要将

small初始化为较大的值(已知大于预期的输入数字)或第一个输入值。

答案 4 :(得分:0)

这里只是对代码的快速修复。我希望有助于了解问题所在。

请考虑到其他人到目前为止所写的内容:有很多有用的提示和备注可以帮助您提高代码质量。

int smallest(){
  int tyy;
  int small=INT_MAX;                // (1)
  for(tyy=0; tyy<11;tyy++){
//     int small;                   // Moved outside the loop and initialized - See (1)
    int numbers;
    printf("input numbers");
    scanf("%d", &numbers);
    int blockloop;
    while ((blockloop=getchar()) != EOF && blockloop != '\n');
    if (numbers<small){
      small=numbers;
//       printf("%d\n",numbers);    // Removed
    }
  }
  printf("%d\n",small);             // Added - Print the smallest
  return 0;
}

为了能够使用INT_MAX,您必须包含正确的标题。

#include <limits.h>                 // Provides the INT_MAX symbolic constant

下面是一个如何根据一些基本原则(如

)编写程序的示例
  • 功能分解 - 每个功能执行一个明确定义的单一任务
  • 变量初始化 - 每个变量在使用前都已正确初始化
  • 代码可读性 - 每个实体都有一个正确的,有希望的有意义的名称;用符号常量代替魔数;添加空格以突出显示代码结构

这是代码。

#include <stdio.h>
#include <limits.h>

#define NUM_TO_BE_READ   11

// Find and return the smallest number in the given array of ints
int FindSmallest( int numbers[], unsigned int size ){
    int   smallest   =   numbers[ 0 ];
    int   i          =   1;

    for ( i = 1; i < size; i++ ){
        if ( numbers[ i ] < smallest ){
        smallest   =   numbers[ i ];
        }
    }

    return smallest;
}

// The main function - program entry point
int main(){
    // Define and initialize a few variables
    int   numbers[ NUM_TO_BE_READ ];
    int   smallest   =   INT_MAX;
    int   i          =   0;

    for ( i = 0; i < NUM_TO_BE_READ; i++ )
    {
    numbers[ i ]   =   INT_MAX;
    }

    // Read numbers
    for ( i = 0; i < NUM_TO_BE_READ; i++ )
    {
    printf( "number: " );
    scanf( "%d", &numbers[ i ] );
    }

    // Find the smallest number
    smallest   =   FindSmallest( numbers, NUM_TO_BE_READ );

    // Print the smallest number and exit
    printf("The smallest number is: %d\n", smallest );
    return 0;
}