[英]Why does my for loop not loop the number of times I specified?
我一直在嘗試在 C 中編寫一個程序,但我不知道它是否正確,因為我for
循環在開始時僅在 3 次循環后結束,而它應該在 10 次后結束。如果有人能告訴我問題出在哪里,我會欣賞它。 這是程序。
#include <stdio.h>
#define size 10
int main(int argc, char *argv[]){
int array[size],sum[size],k,sum1,i,j;
sum1=0;
printf("give 10 integers:\n");
for(i=0; i<size; i++){
scanf("%d", array[i]);
sum[i]=0;
}
for(i=1; i<size; i++)
{
for(j=10; j>i; j--){
if(array[j-1]>array[j]){
k=array[j-1];
array[j-1]=array[j];
array[j]=array[j-1];
}
}
}
for(i=1; i<size; i++){
if(array[i]=array[i+1])
sum[i]=sum[i]+1;
}
for(i=1; i<size; i++){
sum1=sum1+sum[i];
}
printf("%d", sum1);
}
我嘗試刪除其他循環,但只刪除一次 for 循環。
無效的 scanf 第二個參數:
scanf("%d", array[i]);
array[i] 是一個 integer,scanf 需要一個指針,所以:
scanf("%d", &array[i]);
// or
scanf("%d", array + i);
做作的條件:
if (array[i] = array[i+1])
應該
if (array[i] == array[i+1])
設置了變量 k,但從未使用過。
數組 'sum' 可以在聲明時用 0 填充。
int sum[size] = { 0 };
從索引 1 而不是 0 開始迭代數組。
索引 'j' 初始化為 10,而最大索引為 9。
將變量設置為自身,您的意思是使用“k”交換變量嗎?
array[j - 1] = array[j]; // both cells now have same value
array[j] = array[j - 1]; // so this means array[j] = array[j]
稍微改進了代碼,但無法命名其他循環,我不知道您要實現什么。 代碼編譯沒有錯誤,只留下語義錯誤。
#include <stdio.h>
#include <stdlib.h>
#define NUMBERS_COUNT 10
static void promptNumbers(int numbers[], int numbersCount)
{
int readNumbers;
printf("Give %d integers:\n", numbersCount);
for (readNumbers = 0; readNumbers < numbersCount; readNumbers++)
scanf("%d", numbers + readNumbers);
}
int main(void)
{
int numbers[NUMBERS_COUNT];
int sum[NUMBERS_COUNT] = { 0 };
int i, j, sum1;
sum1 = 0;
promptNumbers(numbers, NUMBERS_COUNT);
for (i = 0; i < NUMBERS_COUNT; i++)
{
for (j = 9; j > i; j--)
{
if (numbers[j - 1] > numbers[j])
{
numbers[j - 1] = numbers[j];
numbers[j] = numbers[j - 1];
}
}
}
for (i = 0; i < NUMBERS_COUNT - 1; i++)
{
if (numbers[i] == numbers[i + 1])
sum[i] = sum[i] + 1;
}
for (i = 0; i < NUMBERS_COUNT; i++)
sum1 = sum1 + sum[i];
printf("%d", sum1);
return EXIT_SUCCESS;
}
gcc -ansi -pedantic -Wall -Wextra -Werror temp.c -o temp
echo '1 2 3 4 5 6 7 8 9 10' | ./temp
編輯:第二次迭代,仍然不清楚你在用數組“sum”做什么,計算你有多少重復項?
#include <stdio.h>
#include <stdlib.h>
#define NUMBERS_COUNT 10
static void promptNumbers(int numbers[], int numbersCount)
{
int readNumbers;
printf("Give %d integers:\n", numbersCount);
for (readNumbers = 0; readNumbers < numbersCount; readNumbers++)
scanf("%d", numbers + readNumbers);
}
static void swapNumbers(int * const first, int * const second)
{
int swapBuffer = * first;
* first = * second;
* second = swapBuffer;
}
static void sortNumbers(int numbers[], int numbersCount)
{
int i, j;
for (i = 0; i < numbersCount; i++)
{
for (j = 9; j > i; j--)
{
if (numbers[j - 1] > numbers[j])
swapNumbers(& numbers[j], & numbers[j - 1]);
}
}
}
int main(void)
{
int numbers[NUMBERS_COUNT];
int sum[NUMBERS_COUNT] = { 0 };
int i, sum1;
sum1 = 0;
promptNumbers(numbers, NUMBERS_COUNT);
sortNumbers(numbers, NUMBERS_COUNT);
for (i = 0; i < NUMBERS_COUNT; i++)
{
if (numbers[i] == numbers[i + 1])
sum[i] = sum[i] + 1;
}
for (i = 0; i < NUMBERS_COUNT; i++)
sum1 = sum1 + sum[i];
printf("%d", sum1);
return EXIT_SUCCESS;
}
gcc -ansi -pedantic -Wall -Wextra -Werror temp.c -o temp
echo '10 2 3 7 1 1 8 8 8 8' | ./temp
echo '10 2 3 7 4 1 9 6 5 8' | ./temp
這里的問題是你的循環必須從 0 開始。使用:
for(i = 0; i < size; i++) {
...
}
看,循環將從i = 0
開始,並且只要i < size
就會一直運行。 當i
正好等於size
時,它將不再運行。
要了解這一點,請運行代碼:
#include <stdio.h>
int main() {
int i, size = 10;
for(i = 0; i < size; i++) {
printf("The value of i is: %d\n", i);
}
return 0;
}
這將告訴您循環永遠不會運行i = 10
,因為當i
為10
時i < size
為 False,因此循環條件為 false。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.