【问题标题】:How can I allow a user to input values for an array with a specified initial size?如何允许用户输入具有指定初始大小的数组的值?
【发布时间】:2023-04-07 20:45:01
【问题描述】:

我希望能够向使用此代码的用户询问数组的四个值。我有一些代码,但它会打印一个我似乎无法解决的错误。我正在尝试按照本视频教程中的示例对我的一些代码进行建模:https://youtu.be/IPYA3b3_nyk?list=PL6gx4Cwl9DGAKIXv8Yr6nhGJ9Vlcjyymq,但是,我似乎无法让它在没有错误的情况下编译。

错误如下: 在函数'main'中: intitializeint.c:12:9:警告:格式“%d”需要“int”类型的参数,但参数 2 的类型为“int *”[-Wformat=] printf("输入值 %d.\n", &i+`); ^

我尝试对每个提示使用 printf() 和 scanf() 以获取值,但发现本教程并试图模仿它。我尝试重新排列“&i+1”,但它只是返回相同的错误。我想要一个增量,以便在输出中显示数组从 1 开始。

 #include <stdio.h>
 #include <stddef.h>

 void printArray(int n[]);

 int main(void)
 {
     int i;
     int n[4];

     for (i = 0; i < 5; ++i) {
         printf("Enter value %d. \n", &i+1);
         scanf("%d", &n[i]);
     }

     printf("%s%13s\n", "Element", "Value");
     printArray(n);

     return 0;
 }

 void printArray(int n[])
{
     int i;
     for (size_t i = 0; i < 4; ++i)  {
         printf("%7zu%13d\n", i, n[i]);
     }
 }

【问题讨论】:

  • 你超出了数组的范围。你有四个元素(索引03,包括),但你的输入循环上升到索引4
  • 关于:&amp;i+1 在对printf() 的调用中需要传递实际值,而不是值的地址。建议:printf("Enter value %d. \n", i+1); 注意,没有address of (&) 运算符。
  • 关于:for (i = 0; i &lt; 5; ++i) { 在 C 中,数组的有效索引是 0...(数组中的元素数 -1)因为在 C 中,数组总是从 0 开始索引的。建议:for (i = 0; i &lt; 4; ++i) {
  • OT:发布的代码包含一些“神奇”数字。 “魔术”数字是没有基础的数字。 IE。 4, 5. 'magic' numbers 使代码更难理解、调试等。建议使用enum 语句或#define 语句为这些'magic' 数字赋予有意义的名称,然后在整个过程中使用这些有意义的名称代码

标签: c


【解决方案1】:

当您编写&amp;i 时,您不小心创建了一个指向i 的指针。您的指针将具有 int * 类型,因为它是一个指向 int 的指针。 %d 格式说明符需要一个 int,而不是指向 int 的指针,这就是编译器给你这个错误的原因。 (你应该重新阅读那个错误,并确保它的每一个字现在对你来说都是完全有意义的。)

解决办法是去掉错误的&amp;操作符:

printf("Enter value %d.\n", i + 1);

【讨论】:

  • 这错过了main()for()语句中的错误
猜你喜欢
  • 2017-04-11
  • 2017-05-07
  • 1970-01-01
  • 2018-10-21
  • 2021-12-31
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多