【问题标题】:give output without using print statement不使用 print 语句给出输出
【发布时间】:2019-09-28 16:15:28
【问题描述】:

我遇到了一个问题,代码是 -

int* plusOne(int* A, int n1) 
{
    int i=1;
    while((A[n1-i]+1==10)&&(i<n1))
    {
        A[n1-i]=0;
        i++;
    }    
    A[n1-i]++;
    for(i=0;i<n1;i++)
    {
        printf("%d",A[i]);
    }
}

直到后来我才读到他们希望我通过使用 return 语句来提供输出。 我搜索了解决方案,并在 Stack Overflow 上找到了 Returning an array using C,但我无法理解 - 请帮助。

【问题讨论】:

  • 我假设你正在做一些编码挑战,要求制作一个函数。简而言之,他们说他们将处理打印数组,您所做的是,制作所需的函数并从中返回该数组。简而言之,您不需要那个 for 循环。只需将完整的循环替换为return A;。此外,无论您在哪里声明 A,要么将其设为 static int A[SIZE],要么使用 malloc() 为其分配内存
  • @Mihir : A[] 可以作为参数传递 - 代码不完整,所以我们无法判断。这将是比此函数中的静态或 malloc() 更好的解决方案,这将分别乞求重入和内存泄漏问题 - 这是不明智的..
  • @Mihir — 当我去编辑问题时,我“发现”函数的第一行隐藏在与三次反引号相同的行上。我认为这会严重影响您的 cmets 的相关性。
  • @JonathanLeffler :从Jeff Attwood's rant on this subject 10 年后仍未解决! ;-)
  • @JonathanLeffler 他们提到“不要打印输出,而是返回值”

标签: c arrays return


【解决方案1】:

让我们一步一步分析你的代码:

  1. 将 1 赋给整数变量 1
  2. 循环是否存在,当最后一个元素只有 9 并且它应该在数组中至少有 2 个元素时,它会第一次为真。

    以 A={.....,9,9} 为例

    如果倒数第二个元素仅为 9,则循环将第二次为真。 在获得第一个非 9 数字或达到第二个元素后,它将完成。
    A={....b,a+1,0,0}
    a 是第一个非 9 数字,或者它可能是第一个元素。

  3. 将打印所有元素..只要有 9(在循环前的原始数组中),它将打印 0。

【讨论】:

  • 请注意,函数的第一行“隐藏”在与用于格式化代码的三重反引号相同的行上(我在编辑问题时“找到”了它)。我认为函数定义会实质性地改变你的答案。
  • 你也需要阅读 StackOverflow 早期的Treating User Myopia。 @JonathanLeffler 无法修复每个人格式错误的帖子!
  • “分析”代码与回答问题不同。程序规范有一点他不理解,不是理解代码本身的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
相关资源
最近更新 更多