程序挂起,不输出任何内容

时间:2019-01-14 08:59:09

标签: c arrays loops recursion

运行此代码时,我得到警告:控制到达非void函数[Wreturn-type]的末尾。我认为这可能是无限递归的情况,但我不知道如何解决。

该程序应该输入数字,直到您输入的不是数字。 cols = [1,2,3,4] values = parsed_csv[parsed_csv.columns[cols]] 函数将任何9与7交换并返回它们。我也有一个条件,我必须打印出最大的5个数字,如果数组中没有5个数字,则必须全部打印出来。

poramnet()

1 个答案:

答案 0 :(得分:0)

要记住的要点:

  1. 即使您认为没有必要,也请始终使用带有if块的方括号。
  2. scanf替换为getc
    1. 这里必须忽略'ENTER'键,
    2. 然后转换为int
    3. 然后使用isdigit进行检查。
  3. 您的一个嵌套for循环中有一个错误:需要j<n,而不是i<n
  4. 保持退出/返回某个功能的最小值。如果您仍然想使用一个函数的多个返回值,那么至少要输入一个默认返回值,即使您编写了错误的代码,也知道它将始终被击中。

有关更多详细信息,请参见代码中的注释。

main.cpp

#include <stdio.h>
#include<string.h>
#include<malloc.h>
#include<ctype.h>

int poramnet(int n, int m, int i){ //i should start with 1
    // Always put brackets with if !!! It avoid confusion
    if(n==0) {
        return m;
    }
    if(n%10==9){
        m+=i*7;
        return m;
    }
    else{
        m+=i*(n%10);
        return poramnet(n/10, m, i*10);
    }
    // put a default return always, so you know if the function returns
    // in an expected way, that you can track it back down.
    return -1;
}

int main()
{
    int array1[100], i=0, output[100], br=1, j, temp, m=0, n;

    // Instead of scanf, you could use getc, ignore the "enter" key-press,
    // and convert to an int from char and then check with isdigit().
    while(1){
        char tempChar;
        tempChar = getc(stdin);
        if (tempChar != '\n') {
            // printf("what you entered is, %c\n", tempChar);
            // printf("is it a digit:  %d\n", !isdigit(tempChar));
            tempChar = tempChar - '0';
            // printf("is it a digit:  %d\n", !isdigit(array1[i]));
            if(isdigit(tempChar)) {
                break;
            }
            array1[i] = tempChar;
            i++;
        }
    }

    n=i;
    for(i=0;i<n;i++){
        output[i]=poramnet(array1[i], m, br);
    }



    for(i=0;i<n-1;i++){
        for(j=1;j<n;j++){ // you had a bug here also! you need j<n and not i<n !! copy-paste error!
            if(output[i]>output[j]){
                temp=output[i];
                output[i]=output[j];
                output[j]=temp;
            }
        }
    }

    if(n<5){
        for(i=0;i<n;i++)
            printf("%d ", output[i]);
    }
    else{
        for(i=0;i<5;i++){
            printf("%d ", output[i]);
        }
    }
    return 0;
}

输出

  

junglefox @ ubuntu:〜/ test_programs $。/ test

     

1

     

2

     

3

     

4

     

5

     

a

     

1 4 3 2 5 junglefox @ ubuntu:〜/ test_programs $