scanf卡住并继续输入

时间:2017-10-31 07:30:39

标签: c scanf

我正在编写一个简单的排序程序但是scanf()似乎被卡住了并且继续接受无限输入。我知道如果输入无效输入,就会发生这种情况。但是,即使我输入int,也会发生这种情况。

以下是代码:

#include <stdio.h>

int main() {
    int arr[5],temp,pos,i=0;
    printf("Enter the elements\n");

    while(i<5){
        scanf("%d ",&arr[i]);
        ++i;
    }

    printf("Sorted Array:");

    for(int i=0;i<4;++i){
        pos = i;
        for(int j=i+1;j<5;++i){
            if(arr[pos]>arr[j])
                pos = j;
        }

        temp = arr[i];
        arr[i] = arr[pos];
        arr[pos] = temp;
    }

    for(int i=0;i<5;++i){
        printf("%d",arr[i]);
    }

    return 0;
}

2 个答案:

答案 0 :(得分:4)

您的代码问题与scanf()无关。这是由于不正确的循环约束。

for(int i=0;i<4;++i){
       pos = i;
         for(int j=i+1;j<5;++i){
             if(arr[pos]>arr[j])
                pos = j;
        }
         temp = arr[i];
         arr[i] = arr[pos];
        arr[pos] = temp;

    }

上述排序循环是您遇到问题的原因。您必须将内循环中的++i更改为++j才能解决您的问题。!!

for(int i=0;i<4;++i){
       pos = i;
         for(int j=i+1;j<5;++j){
             if(arr[pos]>arr[j])
                pos = j;
        }
         temp = arr[i];
         arr[i] = arr[pos];
        arr[pos] = temp;

    }

您可以像这样更正代码。希望这会有所帮助。!!

答案 1 :(得分:0)

看来你有轻微的拼写错误, 在排序内循环中将++ i更改为++ j将解决问题。