C For循环输出错误(控制可能到达非void函数的结尾)

C For loop output error (control may reach end of non-void function)

我在 Python 中有以下代码,我想将其翻译成 C:

n=input('input a number between 1 and 8')
for i in range(0,n):
    print (i*'#')

我的 for 循环什么都不做。为什么?到目前为止我有:

#include <cs50.h>
#include <stdio.h>

int get_positive_int(string prompt);
char func(int n);

int main(void)
{
    int i = get_positive_int("Positive integer between 1 and 8: ");
    printf("%i\n", i);
}

int get_positive_int(string prompt)
{
    int n;
    do
    {
        n = get_int("%s", prompt);
    }    
    while (n>8 || n<1);
    printf("Stored: ");
    return n;   
}


char func(int n)
{
    for (int j=0;j<n;j++)
    {
        for (int k=0;k<n;k++) 
        {    
            return printf("#");
        }
        printf("\n");
    }
}
  1. 你不叫func.我觉得这个很好理解
  2. 为什么要用 char return 类型声明 func() 它不应该 return 任何东西。
  3. 不要 return 任何东西。 不要 return printf。你为什么想这么做?您只想打印字符。 return 立即退出函数。

您从未调用过 func,所以它当然什么都不做。您的问题标题 "control may reach end of non-void function)" 中的错误是因为您将 func 声明为 return char,但是如果 n 则执行不会 return小于或等于 0(循环立即结束)。

你那里的 return 在任何情况下都没有意义,因为 printf 的 return 值在这里并不真正相关。并且它在每行上打印相同数量的井号 (#),而不是增加的数量。我怀疑您想要类似的东西(用内联注释记录的更改):

void func(int n) // return type void so no return needed
{
    for (int j=0;j<n;j++)
    {
        for (int k=0;k<j;k++)  // k < j, not k < n, so #s increase from 0 to n
        {    
            printf("#");  // no return so loop runs to completion
        }
        printf("\n");
    }
}
  1. 你应该包括string.h和stdlib.h
  2. 您使用的字符串数据类型无效。你应该使用 (const char *prompt[])
  3. while(n > 8 || n < 1) 告诉循环存储指定范围外的数字,而不是在指定范围内。它应该是 while(n <= 8 && n >= 1) 如果你希望它包含在内,否则你可以省略 = 运算符。
  4. python 代码也不起作用。这个for循环的目的是什么?期望的输出是什么?