我正在尝试使用至少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,我不关心数组中浪费的内存单元。
答案 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