我有一些功课要做大学,因为我是初学者,我不知道如何编码。所以,有10个测试,每个测试的等级在0到10之间。我必须确保我没有得到任何负数或大于10的数字。在运行代码时我必须按顺序放2个数字进入下一个,当时,我显然只想要保存到A [i]的那个。我希望你能理解,即使我甚至无法解释这个问题。 :)
#include<stdio.h>
int main()
{
int A[10];
int i, j;
for ( i = 1; i<11; i++)
{
printf("Enter %d grade \n", i);
scanf("%d", &j);
if (j<=10 && j>=0)
A[i] = j;
else
printf("Enter a number between 0 and 10\n");
scanf("%d", &j);
}
}
答案 0 :(得分:1)
你写的是什么
else
printf("Enter a number between 0 and 10\n");
scanf("%d", &j);
与
相同 else {
printf("Enter a number between 0 and 10\n");
}
scanf("%d", &j);
你想要的是: -
else {
printf("Enter a number between 0 and 10\n");
scanf("%d", &j);
}
这是很早就讲的。很明显,即使您提供了正确的输入,也需要输入2个数字。
此外,您在A
有10个位置,为什么要写在A[10]
。 C数组是0索引的。您正在处理未定义的行为。
for ( i = 0; i<10; i++)
当用户输入两次错误输入时会发生什么?您需要使用while
循环。 (你不能指望所有用户第二次都是对的。)
检查scanf
的返回类型,检查scanf
来电是否符合您的预期。
我告诉你的其他部分将在循环变量中使用size_t
。
答案 1 :(得分:1)
在这种特殊情况下,添加大括号:
// V-- brace
else {
printf("Enter a number between 0 and 10\n");
scanf("%d", &j);
}
//^-- brace
解决您在邮件中描述的问题。没有大括号,只有else
之后的第一件事是条件的一部分。因此,scanf
始终被执行,无论数字是否在0到10之间。
我也同意其他答案---零索引和for循环边界很重要。 编辑具体来说,在C数组中,第一个元素是0.因此,最好将测试编号为0..9而不是1..10。您还应该将变量命名为它们,因此:
int which_test;
for (which_test = 0; which_test < 10; ++which_test)
答案 2 :(得分:0)
数组从C的索引0开始,因此你的for循环应该是for(i=0;i<10;i++)
答案 3 :(得分:0)
data.(value)
调用了未定义的行为,因为C不检查数组绑定。
C11 J.2未定义的行为
- 将指针加到或减去数组对象和整数类型会产生一个指向超出范围的结果 数组对象,用作一元
A[i] = j;
运算符的操作数 被评估(6.5.6)。
数组*
的代码大小为A
个字节。因此,您可以存储数组元素0到9。
答案 4 :(得分:0)
也许这就是你要找的东西。你应该尝试使用do-while循环。
#include<stdio.h>
int main()
{
int A[10];
int i, j;
for ( i = 0; i<10; i++)
{
do{
printf("Enter %d grade \n", i+1);
scanf("%d", &A[i]);
}while(A[i]<0 || A[i]>10);
}
}
答案 5 :(得分:0)
仔细观察:
if (j<=10 && j>=0)
A[i] = j;
else
printf("Enter a number between 0 and 10\n");
scanf("%d", &j);
else
子句周围没有大括号,因此只有else
之后的第一个语句适用于它。以上内容与:
if (j<=10 && j>=0) {
A[i] = j;
} else {
printf("Enter a number between 0 and 10\n");
}
scanf("%d", &j);
所以每次都会执行第二个scanf
。
始终在if
/ else
,for
和while
块周围添加大括号:
if (j<=10 && j>=0) {
A[i] = j;
} else {
printf("Enter a number between 0 and 10\n");
scanf("%d", &j);
}
此外,您的数组int A[10];
总共有10个元素,索引范围从0到9.您的for
循环使用1到10之间的索引,因此您最终写入的结尾超过了阵列。修复此问题以使用正确的索引:
for ( i = 0; i<10; i++)