【问题标题】:Variable isn't storing return value变量不存储返回值
【发布时间】:2015-11-09 09:13:00
【问题描述】:

我正在尝试制作一个将十六进制字符串转换为十进制的程序。但是,我在从 findLength 函数分配返回的整数值时遇到问题。通过 printf 语句,我可以看出 findLength(theString) 将产生正确的值,但是尽管我有 length = findlength(theString),但长度显示的值为 0。

这不是作业问题,我只是对为什么这个简单的作业不起作用感到非常困惑。我已经声明了长度,所以我知道这不是问题。我也没有收到任何编译器消息。任何帮助将不胜感激。
编辑:我知道 convert 没有做任何有用的事情,需要修复 for 循环,但这不应该影响 findLength 返回对吗? 第二次编辑: 我总是提交一串“324”进行测试。

#include <stdio.h>

int convert(char s[], int theLength);
int findLength(char s[]);

int main(){
    char theString[100];
    int result;
    int i;
    int length;


    printf("%s","Hello, please enter a string below.  Press enter when finished.");


    scanf("%s",theString);      //Apparently scanf is bad but we'll learn better input methods later.
                               //For my tests I submitted a string of '324'.  

    length = (findLength(theString));     //length = findLength('324')
    printf("%d",findLength(theString));   //yields 3
    printf("%d",length);                  //yields value of 0 always.

    result  = convert(theString, length);
    printf("%d\n result is",result);

    return 0;

}               //End of main

int convert(char s[], int theLength){       //This function will eventually converts a string of hex into ints.  As of now it does nothing useful.
    int i;
    int sum;


    for(i = theLength; i=0; i--){
        sum = sum + s[i];
        printf("%d\n",sum);
    }

    return sum;
}               //End of convert



int findLength(char s[]){
    int i;
    for(i = 0; s[i]!='\0'; ++i){
    }

    return(i);

}               //End of findLength

【问题讨论】:

  • i=0 - 有件事告诉我,你并不是有意将其作为你的 for 循环条件。调高你的警告级别。如果您打算向后枚举,它应该是for(i=theLength; i--;)
  • 是的转换需要修复,但我遇到的问题与转换功能无关。我想知道为什么 findLength 的返回值没有存储到 int 长度变量中。
  • 如果您实际上包含了您正在测试的输入字符串 verbatim,这将非常有帮助。在解决上述问题后,see it live。还修复了 sum 的不确定初始值
  • 为什么在 printf 中有额外的内容? printf("%s","您好,请在下面输入一个字符串。完成后按回车。");.
  • 你的编译器是什么代码可以工作ideone.com/cpi2C9。只需将 sum 的第一个值初始化为 0 并更改 for(i = theLength; i=0; 0&lt;=i; i--)

标签: c


【解决方案1】:

变量length 正在存储正确的值。我认为您感到困惑的是您如何布置printf 声明。如果您要尝试以下类似的方法,您的代码会更容易工作。

#include <stdio.h>

int findLength(char s[]);

int main(){
    char theString[100];
    int result;
    int i;
    int length;

    printf("Hello, please enter a string below. Press enter when finished.\n");

    scanf("%s",theString);

    length = (findLength(theString));
    printf("findLength(theString) = %d\n",findLength(theString));
    printf("length = %d\n",length);

    return 0;
}

int findLength(char s[]){
    int i;
    for(i = 0; s[i]!='\0'; ++i){
    }
    return(i);
}

只是为了澄清你的帖子

printf("%d",findLength(theString));
printf("%d",length);

printf("%d\n result is",result);

注意最后一个printf 语句中%d 之前的\n。这是 0,因为您的 convert 函数需要修复,这是 result NOT length 的值。

【讨论】:

  • 我的 printf 语句有什么问题?我知道它们不是 100% 有条理的,但它们仍然应该显示正确的值,对吗?
  • @theBigDream 它们确实显示了正确的值,我认为正是它们的排序方式让您感到困惑。目前,如果您输入问题中提到的“324”,您的代码将输出330\nthe result is0 来自result 而不是length
  • 哦...我知道我是个白痴,我认为在我的 printf 语句中,数字会在句子之后。
猜你喜欢
  • 2013-09-03
  • 1970-01-01
  • 2013-04-24
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
相关资源
最近更新 更多