【问题标题】:C Input won't add to array listC输入不会添加到数组列表
【发布时间】:2021-12-30 13:56:25
【问题描述】:

2 个数组不会存储输入,每个索引号的增量始终为 0,如 printf 所述。


int main()
{
  int ingredientsAmount;
  double ingredientsPrice[10];
  double ingredientsWeight[10];
  
  scanf("%d", &ingredientsAmount);
  
  for(int i = 0; i < ingredientsAmount; i++)  
  {
    scanf("%lf", &ingredientsPrice[i]);
    printf("Price stored at index %lf\n", i); 
    scanf("%lf", &ingredientsWeight[i]); 
    printf("Weight stored at index %lf\n", i); 
  }
  
  return 0;
}

【问题讨论】:

  • OT:您可能想了解结构。
  • 我对自己的编程很陌生,所以你能给我一个链接或解释一下结构是什么吗?

标签: c for-loop integer printf conversion-specifier


【解决方案1】:

您将错误的转换说明符 %lfint 类型的对象一起使用。使用转换说明符%d。写

printf("Price stored at index %d\n", i);

printf("Weight stored at index %d\n", i); 

或者你的意思可能是以下

printf("Price stored at index %d is %f\n", i, ingredientsPrice[i]);

printf("Weight stored at index %d is %f\n", i, ingredientsWeight[i]); 

注意for循环是不安全的,因为用户输入的变量ingredientsAmount的值可以大于声明数组的大小。

至少你应该写

if ( scanf("%d", &ingredientsAmount) != 1 || ingredientsAmount > 10 )
{
   ingredientsAmount = 10;
}

【讨论】:

  • 我从一个消息来源了解到,使用scanf 是不安全的,因为它可用于重载缓冲区。但我不介意 rn 因为我只是使用我迄今为止在 EDX 上学到的知识。我不能使用scanf(10%d) 来获得输入上限吗?像 1 2 3 4 5 6 7 8 9 10 和超过 10 会被忽略吗?
  • @IYSZ 不,你不能这样做。在这种情况下,您需要使用 10 个转换说明符和相应的参数,例如(对于 3 个数字)scanf("%d %d %d", &x, &y, &z);
  • 好的,如果它适合我​​,我会回复。到目前为止,printf 是固定的 :) 我太傻了哈哈
  • 顺便说一句,关于 if 语句检查 ingredientsAmount 是否不等于 1 或大于 10 的最后一个代码块是什么意思?那么为什么ingredientsAmount = 10?它不会只是覆盖输入吗?或者,如果ingredientsAmount 输入大于 10,例如 11 100 12,它只是一种“安全方式”吗?
  • @IYSZ 1 是 scanf 的返回值,表示输入成功。例如,用户可以输入字母而不是数字或输入大于 10 的值。
猜你喜欢
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多