c - C - 在向量中输入数字 0 时中断 while 循环
问题描述
我有这个简单的代码,它将终端中输入的数字插入到每个循环的向量位置。
int main()
{
int vector[5];
int i;
for (i = 0; i < 5; i++)
{
printf("Number: ");
scanf_s("%d", &vector[i]);
}
system("pause");
return 0;
}
我的问题是如何在输入数字 0 后立即中断循环。
例如,假设我的向量有 50 个位置,我输入 10 个正整数位置,现在我希望循环在我输入零时结束,其余 40 个位置保持空白。
我想它与while循环有关,但我什至无法接近我想要的结果。
解决方案
#define MAX_SIZE (5)
int main()
{
int vector[MAX_SIZE] = {0};
int i;
memset(vector, 0xFF, sizeof(vector)); //sets all vector[i] to -1 on init;
for (i = 0; (i < MAX_SIZE) && (i?vector[i-1]:1) ; i++) //you can add the condition to break from the for loop here. This is more complicated but its just for demonstration.
{
printf("Number: ");
scanf_s("%d", &vector[i]);
}
system("pause");
return 0;
}
上面的示例代码演示了使用 for 循环条件表达式作为中断循环的方法。由于您构建循环的方式,其中的三元组可防止 i=0 导致索引越界的情况。更好/更易读的方式如下:
#define MAX_SIZE (5)
int main()
{
int vector[MAX_SIZE] = {0};
int i;
memset(vector, 0xFF, sizeof(vector)); //sets all vector[i] to -1 on init;
for (i = 0; i < MAX_SIZE; i++)
{
printf("Number: %d\n", i);
scanf_s("%d", &vector[i]);
if(vector[i] == 0)
{
break;
}
}
//system("pause");
printf("Broke the loop when i was %d\n", i);
return 0;
}
除了可读性之外,两者之间的区别在于 i 将在第一个中增加一次。此外,请确保初始化您声明的所有变量(所有向量元素都是堆栈垃圾,0xFF memset 将它们全部分配给-1)。
推荐阅读
- node.js - Express Flash 消息不适用于 Axios,但适用于 Postman。这是为什么?
- amazon-s3 - 在不下载完整文件的情况下使用 FFMPEG
- arrays - iOS如何找到浮点/整数值数组的值之间的最小差异
- python - 如何在叠加散点图上注释(标签)?
- javascript - 在javascript中对混合服装尺寸的数组进行排序
- sql - 如果在 SQL 查询中满足特定条件,有没有办法只返回某些值?
- javascript - 使用提供的 id 删除数组中的对象
- c# - WeakReference 在 .Net Framework 和 .Net Core 之间的行为不同
- windows - Git在回购中令人讨厌地坚持
- node.js - 使用 Express 在 Nodejs 中发送和接收文件