我是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。 谢谢!
答案 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;
}