为什么我的程序循环次数太多?

时间:2014-02-28 15:32:25

标签: c loops while-loop

我是C的初学者并试图创建一个程序,并且我的主要功能有问题。

问题:

  1. 在询问他们想要输入多少个整数后,例如:4个数字,循环继续5次,基本上是5个数字。它也只在第二个数字后打印“下一个:”。

  2. 在我用于错误检查的while循环中,在用户输入有效方法之后,例如:输入1,它将打印出它是“无效选择”并重新询问再一次。

  3. 代码:

    #include <stdio.h>
    #include<stdlib.h>
    #include "a3defs.h"
    
    int main() {
      StackType stk;
      StackType *stkPtr = &stk;
    
      //Will be used to check whether to use recursive or iterative
      int method = 0;
      int sum;
      int *sumPnt = &sum;
    
      //Will be used to create array for amount of ints:
      int numOfIntegers;
    
      //Array of ints:
      int *userInts;
      printf("How many integers would you like to enter? "); 
      scanf("%d", &numOfIntegers);
      userInts = (int*)calloc(numOfIntegers, sizeof(int)); //Create the array
    
      printf("Please enter %d numbers: \n", numOfIntegers);
      int i;
      for (i = 0; i < numOfIntegers; i++) {
        scanf("%d\n", &userInts[i]);
        printf("Next:");
      }
    
      while(1) {
        printf("Would you like to used iterative or recursive to sum?\n");
        printf("Enter 1 for iterative or 2 for recursive: ");
        scanf("%d\n", &method); 
        if (method == 1) {
          //found in loop.c
          sumIterative(stkPtr, numOfIntegers, userInts, sumPnt);
          break;
        } else if (method == 2) {
          //Found in loop.c
          sumRecursive(stkPtr, numOfIntegers, userInts, sumPnt);
          break;
        } else {
          printf("Invalid choice. Repeating... \n");
            continue;
        }
      } 
    
      printf("Your sum is: %d", *sumPnt);
        return 0;
    }
    

3 个答案:

答案 0 :(得分:2)

问题1:

只需替换:

scanf("%d\n", &userInts[i]);

scanf("%d", &userInts[i]);

答案 1 :(得分:2)

scanf("%d\n", &userInts[i]);替换为scanf("%d", &userInts[i]);

有关在scanf格式说明符中输入非空白字符的信息,请参阅this

它说:

  

任何角色   这不是空格字符(空格,换行符或制表符)或   格式说明符的一部分(以%字符开头)导致   函数从流中读取下一个字符,将其与之进行比较   这个非空白字符如果匹配,则被丢弃   该函数继续使用格式的下一个字符。如果   字符不匹配,功能失败,返回和离开   流的后续字符未读。

答案 2 :(得分:1)

在格式字符串未以fflush(stdout)结尾的所有printf语句后添加\n。否则,只有在输出下一个\n后才会显示输出。