提问人:Vien Nguyen 提问时间:8/29/2023 最后编辑:chqrlieVien Nguyen 更新时间:8/29/2023 访问量:55
C程序中的scanf问题,无法单独输入列表的元素并输出它们
Problem with scanf in C program to input elements of a list individually and output them
问:
我正在尝试制作一个将元素单独输入到列表中的程序,但不知何故,它只运行到第二个元素,我不知道为什么。
#include <stdio.h>
int main() {
int n;
int arr[n];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
for (int x = 0; x < n; x++) {
printf("%d", arr[x]);
}
return 0;
}
5
1
2
12
--------------------------------
Process exited after 1.99 seconds with return value 0
Press any key to continue . . .
这是我最初得到的。我尝试在第二个中添加一个角色,但它让我得到了这个。\\n
scanf
5
1
2
3
12
\--------------------------------
Process exited after 5.1 seconds with return value 0
Press any key to continue . . .
答:
1赞
0___________
8/29/2023
#1
我建议启用警告。如果您使用 gcc use,这将迫使您删除所有警告,否则程序将无法编译。-Wall -Wextra -Werror
当你编译你的程序时,你会得到:
<source>:5:5: warning: 'n' is used uninitialized [-Wuninitialized]
5 | int arr[n];
| ^~~
这意味着您需要先分配一些值(例如,通过使用 )。否则,您的代码将调用未定义的行为,并且无法预测您的代码的行为。scanf
还要始终检查结果scanf
int main(void){
int n;
if(scanf("%d",&n) == 1)
{
int arr[n];
for(int i = 0; i<n;i++){
if(scanf("%d",&arr[i]) != 1)
{
printf("Error scanning the value at index %d. Exiting\n", i);
return 1;
}
}
for(int x = 0; x<n;x++){
printf("%d",arr[x]);
}
}
return 0;
}
https://godbolt.org/z/Y481vcM1c
评论
0赞
chqrlie
8/29/2023
我可以建议吗?printf("%d\n", arr[x]);
0赞
0___________
8/29/2023
@chqrlie我正在考虑它,但我不确定这是否是 OP 想要的
2赞
paulsm4
8/29/2023
我同意“始终启用完整警告”。对于 GCC,我鼓励.另外:我认为鼓励开发人员认识到“调试器是他们的朋友”非常重要。尽早学习他们的调试器,并经常使用它。恕我直言......-Wall -Wextra -pedantic
1赞
0___________
8/29/2023
@paulsm4 我会认为迂腐,因为坚持 40 年的标准是没有意义的
0赞
chqrlie
8/29/2023
目前尚不清楚 OP 是什么意思,我尝试在第二次扫描
中添加一个 \\n
字符......在格式中添加 A 需要在末尾进行额外的输入,但不应导致 A 出现在输出中。\n
scanf()
\
评论
arr
n
n
n
scanf
scanf
scanf("%d\n",...)