【问题标题】:Inputing integers straight across in C在C中直接输入整数
【发布时间】:2015-07-27 22:08:26
【问题描述】:

我正在上 C 初学者课程,我想知道是否有办法直接输入整数并将它们平均在一起?我正在努力使我的程序尽可能整洁。

我想直接输入整数,例如:

输入温度,完成后输入 00:

 60 80 97 42

 Average is: 69.75

我不想输入如下所示的整数:

输入温度,完成后输入 00:75

输入温度,完成后输入 00:80

输入温度,完成后输入 00:46

输入温度,完成后输入 00:91

平均为:73

【问题讨论】:

  • 定义“直接跨越”
  • 向我们展示您到目前为止所做的尝试、您认为应该做什么以及实际发生的情况
  • 读取整行并使用一些适当的函数来拆分值(如 strtok)。
  • 000会区分吗?
  • 1) 使用fgetc() 读取空白(如果代码遇到\n,停止读取)如果读取非空白,使用ungetc() 2) if scanf("%d", &num) == 0 退出,因为非数读。 3) 将num 添加到运行总数中。转到步骤 1。将总数除以读取的数字。注意:行长没有限制。见stackoverflow.com/a/27155807/2410359

标签: c average


【解决方案1】:
#include <stdio.h>
#include <string.h>

int main(void){
    char input[64];
    double ave = 0.0, value;
    int count = 0;

    printf("Enter the temperatures and Enter 00 when finished:\n");
    while(1){
        if(1==scanf("%63s", input)){
            if(strcmp(input, "00") == 0)
                break;
            if(1==sscanf(input, "%lf", &value))
                ave += (value - ave) / ++count;
        }
    }
    if(count)
        printf("Average is: %g\n", ave);
    else
        printf("Input one or more values\n");

    return 0;
}

【讨论】:

    【解决方案2】:

    使用scanf 函数,任何空白字符都被视为每个整数输入的结尾。因此,在循环中使用scanf,您可以在同一行中连续输入值。

    如果您希望它每次都为不同数量的条目工作,您必须修改代码以使用 while 循环并动态分配数组,因为大小是未知的。然后检查像 00 这样的转义序列。

    所有值都存储在一个数组中,您可以在其中进行平均计算

    #include <stdio.h>
    
    #define NUM_OF_ENTRIES 5
    
    int main()
    {
        printf("Enter numbers: ");
        int i = 0;
        int value_set[NUM_OF_ENTRIES];
        for (i = 0; i < NUM_OF_ENTRIES; i++ )
        {
            scanf("%d", &value_set[i]);
        }
    

    【讨论】:

      【解决方案3】:

      我相信您应该将终止条件从输入00 更改为类似输入x。 因此,您的代码应如下所示::

      int n;
      int sum = 0, count = 0;
      while(scanf("%d", &n)) {
          sum = sum + n;
          count++;
      }
      printf("%lf", double(sum/count));
      

      scanf 返回成功输入的数量。因为n被声明为int,所以每次你输入一些整数值,scanf将返回1,如果你输入一些不是int类型的值,就像你输入x一样(是char)scanf 会返回0,因为x 不是整数,这样就可以计算平均值了。

      【讨论】:

        【解决方案4】:

        代码可以使用scanf("%d", &amp;number) 读取整数。问题是"%d" 在扫描int 之前首先扫描并丢弃包括'\n' 的前导空白。 '\n' 需要知道何时停止,因为 OP 想要“直接输入整数”。因此,代码应该首先一次查找一个空白字符。找到行尾'\n'后,扫描完成。

        使用这种方法,对数字的计数没有实际限制。

        #include <ctype.h>
        #include <stdio.h>
        
        double Line_Average(void) {
          double sum = 0;
          unsigned long long count = 0;
        
          while (1) {
            int ch;
            while (isspace(ch = fgetc(stdin)) && ch != '\n')
              ;
            if (ch == '\n' || ch == EOF) {
              break; // End-of-line or End-if file detected.
              }
            ungetc(ch, stdin); // Put back character for subsequent `scanf()`
        
            int data;
            if (scanf("%d", &data) != 1) {
               break; // Bad data
            }
            sum += data;
            count++;
          }
          return sum/count;
        }
        
        // sample usage
        puts("Enter the temperatures");
        double Average = Line_Average();
        printf("Average is: %.2f\n", Average);
        

        【讨论】:

          【解决方案5】:

          一种可能性:

            double sum = 0;
            double val;
            size_t count = 0;
          
            char follow;
          
            while( scanf( "%lf%c", &val, &follow ) == 2 )
            {
              sum += val;
              count++;
              if ( follow == '\n' )
                break;
            }
          
            printf( "average = %f\n", sum/count );
          

          这将读取每个数字加上紧随其后的字符,直到它看到换行符或非数字字符串。它并不完美;如果您键入一个数字,后跟一个空格,然后是换行符,那么它不会中断循环。但它应该会给你一些想法。

          【讨论】:

            【解决方案6】:

            因为你没有发布代码。我已经给出了一个示例代码......从这里你可以通过一些调整来构建你需要的东西

            #include<stdio.h>
            
            main()
            {
               int one, two, thr, four, five, avg;
                printf("\nEnter the temperatures and Enter 00 when finished:");
                scanf ("%d %d %d %d %d", &one, &two, &thr, &four, &five);
                avg=(one+two+thr+four+five)/5;
                printf("Average value is %d", avg);
            }
            

            【讨论】:

            • 如果输入的值不完全是 5 个,这将不起作用。另一个问题是,如果 nr 5 是 00 值,您仍然使用它进行平均计算。
            猜你喜欢
            • 2012-08-13
            • 2020-01-30
            • 1970-01-01
            • 2011-05-09
            • 2023-03-06
            • 2014-02-03
            • 2016-10-12
            • 2012-03-08
            • 2014-04-05
            相关资源
            最近更新 更多