C输出混淆

ki1q1bka  于 2023-01-12  发布在  其他
关注(0)|答案(1)|浏览(98)

我想学一些C,但很痛苦。我有个任务:写一个C程序来确定输入的整数序列的最小值和最大值,以字符串"done"结束。非常简单的任务,就像输入一样:5 2 9 done然而输出是错误的,我不能弄清楚。我将非常感谢一些帮助。Thx!
代码:

#include <stdio.h>
#include <string.h>
int main() {
    char line[1000];
    int val, min = 10, max = -1;
    while ( 1 ) {
      scanf("%d", &val);
      if (val < min) min = val;
      if (val > max) max = val;
      scanf("%4s", line);
      if (strcmp("done", line) == 0) break;
    }
    printf("Maximum %d\n", max);
    printf("Minimum %d", min);
}

我测试代码的两个环境都将输出最大值9,最小值5。有人能解释一下这是怎么回事吗?

y53ybaqx

y53ybaqx1#

根据while循环

while ( 1 ) {
  scanf("%d", &val);
  if (val < min) min = val;
  if (val > max) max = val;
  scanf("%4s", line);
  if (strcmp("done", line) == 0) break;
}

你必须在每次输入一个数字后输入一个字符串。
因此,第二个数字2被认为是字符串的输入。
整数也可以是小于-1的负数或大于10的正数。

int val, min = 10, max = -1;

没有任何意义。
相反,您可以读取字符数组中的所有数字,然后使用例如atoi函数将输入的字符串转换为数字。
例如,一个简单的程序可以看起来像

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main( void ) 
{
    char line[16];
    int min = 0, max = 0;
    int empty = 1;

    while ( scanf( "%15s", line ) == 1 && strcmp( line, "done" ) != 0 )
    {
        int val = atoi( line );

        if ( empty )
        {
            min   = val;
            max   = val;
            empty = 0;
        }
        else if ( max < val )
        {
            max = val;
        }
        else if ( val < min )
        {
            min = val;
        }
    }
     
    if ( empty )
    {
        puts( "The sequence of numbers is empty." );
    }
    else
    {
        printf( "Maximum %d\n", max );
        printf( "Minimum %d\n", min );
    }
}

您只需输入字符串"done"一次即可中断循环。在所有其他情况下,您只需输入整数。

相关问题