当没有填充每个单元格时打印阵列

时间:2014-03-01 22:10:57

标签: c arrays dynamic

我正在尝试使用至少12个双打填充数组,然后在数组中打印双打。如果我使用正好12个双打,这可以正常工作,但如果我使用少于12个双打,程序将不会继续,直到我输入12.代码看起来像:

#include<stdio.h>
#include<string>
int main(){
    double arr[12];
    printf("Enter Numbers\n");
    for(int i=0;i<12;i++){
        scanf_s("%lf",&arr[i]);
    }
    for(int i=0;i<12;i++){
        printf("%f\n",arr[i]);
    }
    return 0;
}

我是否可以进行简单的更改,以便如果我输入数字1 13 52或数字8 99 11 45 82,它会将它们打印回给我?我不担心超过12,我不关心数组中浪费的内存单元。

2 个答案:

答案 0 :(得分:0)

要执行此操作,您必须具有一些退出条件。例如,当您输入负数时,可以停止

int n = 12;
for(int i=0;i<12;i++){
    scanf_s("%lf",&arr[i]);
    if (arr[i] < 0) {
        n = i;
        break;
    }
}

for(int i=0;i<n;i++){
    printf("%f\n",arr[i]);
}

或其他一些条件,例如输入零或一些大的负数。

更新

如果您想在没有更多号码时停止,可以查看scanf_s的返回值为@leeduhem建议

int n = 12;
for(int i=0;i<12;i++){
    int rc = scanf_s("%lf",&arr[i]);
    if (rc == 0 || rc == EOF) {
        n = i;
        break;
    }
}

答案 1 :(得分:0)

试试这个:

#include<stdio.h>

int main(){
    int n;
    double arr[12];
    printf("Enter Numbers: \n");

    n = 0;
    while (scanf(" %lf", &arr[n++]) != EOF && n < 12)
        ;

    for(int i=0;i<n-1;i++){
        printf("%f\n",arr[i]);
    }
    return 0;
}

运行(仅在Linux上测试):

$ ./a.out 
Enter Numbers: 
1 2 3
<=============== Ctr-D on Unix-like, Ctrl-Z on Windows
1.000000
2.000000
3.000000
$ ./a.out 
Enter Numbers: 
1 2 3
4 5 6
<=============== Ctr-D on Unix-like, Ctrl-Z on Windows
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000