c - C - 基于变量的 For 循环没有迭代正确的次数
问题描述
在我当前的测试用例中,nCities 在运行时变为 8。我通过 printf 打印来确保这一点。但是,当我使用 i <= nCities 时,循环似乎只迭代一次。如果我使用 i <= 8,它工作正常。为什么是这样?
int nCities = 0;
scanf("%d", &nCities);
if (!nCities == 0)
{
printf("Number of cities: %d \n", nCities);
char tempCity[3];
for(int i=1; i <= nCities; i++)
{
printf("Number of cities: %d \n", nCities);
scanf( "%s", tempCity );
printf( "%s", tempCity );
}
解决方案
对于输入“ABC”,代码scanf( "%s", tempCity );
将三个字符“ABC”放入tempCity
其中并以空字符终止它们。但是,tempCity
被定义为只有三个字符,带有char tempCity[3];
. 由于 超出了数组的边界,scanf
因此 C 标准未定义结果行为。
通过使tempCity
足够大以包含它所需的所有数据和/或scanf
通过指定最大字段宽度来限制它来解决此问题,例如%3f
. (请注意,使用%3f
,tempCity
应定义为char tempCity[4]
, 以允许三个字符加上空字符。)
推荐阅读
- javascript - 无法在角度项目中向@input 声明数字
- php - Apexchart折线图多线Json
- java - android中的可绘制文件夹
- python - 如何过滤熊猫数据框以删除相同类型的最后一行
- firebase - FlutterFire 后台隔离通信
- regex - bigquery 非贪婪 REGEXP_EXTRACT
- php - PHPSpreadsheet 总是缺少类,尽管作曲家安装和要求
- json - jq + 替换 json 中重读 56 次的单词的正确方法是什么
- python - 根据其他列中的值更新列值
- python - 反引号/反引号键在使用触发自定义热键后不起作用