我正在使用数组做一个简单的合并排序问题。因此,我首先扫描一个数组,然后对其进行合并排序。但是当我打印数组时,它给出了最奇怪的值。我不明白为什么。
如果我尝试使用简单的迭代器i扫描并打印另一个文件中的数组,那么就可以了。
int n, arrayIndex;
printf("Enter the number of elements in array between 1 to 100");
scanf("%d", &n);
printf("%d \n", n);
int a[n];
printf("Enter the elements of array \n");
for (arrayIndex = 0; arrayIndex < n; arrayIndex++);
{
scanf("%d ",&a[arrayIndex]);
}
for (arrayIndex = 0; arrayIndex <n; arrayIndex++)
{
printf("%d ", a[arrayIndex]);
}
我得到的结果是:
Enter the number of elements in array between 1 to 100 2 2 Enter the elements of array 1 3 -1709286559 32766
答案 0 :(得分:1)
您的问题是一个典型的错误
for (arrayIndex = 0; arrayIndex < n; arrayIndex++);
{
scanf("%d ",&a[arrayIndex]);
}
;
行末尾的for
是一个空语句。接下来的代码块仅执行一次。
为避免此类愚蠢的错误,可以使用Kernighan和Richie样式,其中在for
行的末尾插入开括号,而不是在它们自己的行上插入:
for (arrayIndex = 0; arrayIndex < n; arrayIndex++) {
scanf("%d ", &a[arrayIndex]);
}
还请注意,您不应在scanf()
转换规范中添加尾随空格,否则将导致scanf()
提示输入更多数据,直到文件结尾或输入的字符不匹配为止isspace()
。还测试scanf()
的返回值以检测无效输入并避免随后的未定义行为:
for (arrayIndex = 0; arrayIndex < n; arrayIndex++) {
if (scanf("%d", &a[arrayIndex]) != 1) {
printf("invalid input\n");
return 1;
}
}
答案 1 :(得分:0)
在此为您加上分号
for (arrayIndex = 0; arrayIndex < n; arrayIndex++);
{
scanf("%d ",&a[arrayIndex]);
}
当你不应该
如果您删除了此代码,则您的代码应该像这样,它将可以正常工作
另外,删除“%d”,“ scanf("%d ",&a[arrayIndex]);
”内的空格,应该像这样scanf("%d",&a[arrayIndex]);
int n, arrayIndex;
printf("Enter the number of elements in array between 1 to 100");
scanf("%d",&n);
printf("%d \n", n);
int a[n];
printf("Enter the elements of array \n");
for (arrayIndex = 0; arrayIndex < n; arrayIndex++)
{
scanf("%d",&a[arrayIndex]);
}
for (arrayIndex = 0; arrayIndex <n; arrayIndex++)
{
printf("%d ", a[arrayIndex]);
}
答案 2 :(得分:0)
如果由于下面的代码部分而发生这种情况:
for (arrayIndex = 0; arrayIndex < n; arrayIndex++);
{
scanf("%d ",&a[arrayIndex]);
}
在for-loop
语句后写分号(;)时,循环正在循环,而无需进行
{
scanf("%d ",&a[arrayIndex]);
}
这部分代码。 for-loop
的循环结束后,该部分仅执行一次。在完成循环后,整数arrayIndex
的值将变为n
。因此输入值将存储在a[n]
中。
在将索引<0> a 从索引0打印到n-1时,输入仅存储在a[n]
中,因此所有输出都显示垃圾值。
因此,在for循环后删除分号即可,一切正常。您的代码必须如下所示:
int n, arrayIndex;
printf("Enter the number of elements in array between 1 to 100");
scanf("%d",&n);
printf("%d \n", n);
int a[n];
printf("Enter the elements of array \n");
for (arrayIndex = 0; arrayIndex < n; arrayIndex++)
{
scanf("%d ",&a[arrayIndex]);
}
for (arrayIndex = 0; arrayIndex <n; arrayIndex++)
{
printf("%d ", a[arrayIndex]);
}