我是C的初学者并试图创建一个程序,并且我的主要功能有问题。
问题:
在询问他们想要输入多少个整数后,例如:4个数字,循环继续5次,基本上是5个数字。它也只在第二个数字后打印“下一个:”。
在我用于错误检查的while
循环中,在用户输入有效方法之后,例如:输入1,它将打印出它是“无效选择”并重新询问再一次。
代码:
#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 = ∑
//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;
}
答案 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
后才会显示输出。