int main()
{
int t, i;
int *nums;
scanf("%d", &t);
nums = malloc(t * sizeof(int));
for(i = 0; i < t; i++)
{
scanf("%d", &nums[i]);
}
printf("hey");
}
出于某种原因,它会挂起,等待更多输入!有什么想法吗?
答案 0 :(得分:1)
这段代码是正确的,除了你没有释放你的记忆(对于这个简单的代码不是一个大问题)并且你没有检查scanf
错误,这可能是导致你的问题。
具有错误检查和正确内存处理的更好实现如下所述:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t, i, ret;
int *nums;
ret = scanf("%d", &t);
if(ret != 1)
{
/* something wrong */
}
nums = malloc(t * sizeof(int));
if(nums==NULL)
{
/* memory error */
}
for(i = 0; i < t; i++)
{
ret = scanf("%d", &nums[i]);
if(ret != 1)
{
/* something wrong */
}
}
free(nums);
printf("hey");
return 0;
}
答案 1 :(得分:1)
在这里猜一下......
但我猜你跑了它并输入了:
4
1234
例如,你输入4然后1234并且它挂起。那么,那将是因为1234是第一个数字而不是4个不同的数字所以它等待第二个数字。你必须在每个号码之间按Enter键或一些这样的分隔符。
尝试使用这组输入:
4
1234
29
4
5
你应该得到:
hey
从语法上讲,您应该检查函数调用的返回值。确保malloc没有返回零。确保scanf返回您希望读取的输入数。添加打印输出以确保其读入的值是您期望/想要读取的内容。
编辑: 猜猜你在程序中有一个拼写错误,这里没有显示。如:
scanf("%s", &t);
或者你得到的是'嘿',只是没有看到它。
[ov@MARVIN sotest]$ ./a.out
5 5 4 3 23 1
hey[ov@MARVIN sotest]$
在我的提示中看到'嘿'有点隐藏,因为你在打印输出中缺少'\ n'新行?
答案 2 :(得分:1)
记得在完成后冲洗。
在聊天中,OP的评论“不......顺便说一句,如果我在打印当前输入的循环中添加一个printf,它会打印除最后一个之外的所有内容......”。这暗示问题出在最后的输出上。
以下内容将数据发送出去打印。但stdout
通常是缓冲的。实际输出可能要到一段时间后才会发生。当1)输出包含行尾'\n'
时,输出刷新,2)fflush()
被调用3)程序结束。当程序结束时,我很惊讶输出没有出现,但可能OP的真实代码与帖子不同。
printf("hey");
更改为
printf("hey\n");
printf("hey");
fflush(stdout);
顺便说一句:这也在@Diversity回答中暗示。
注意:最好检查scanf()
// scanf("%d", &t)
if (1 != scanf("%d", &t)) Handle_BadInput_or_EOF();