2015-08-16 2 views
0

Я пытаюсь создать программу, которая преобразует шестнадцатеричную строку в десятичную. Однако у меня возникает проблема с назначением возвращаемого целочисленного значения из функции findLength. Переходя к операторам printf, я могу сказать, что findLength (theString) даст правильное значение, однако длина показывает значение 0, несмотря на то, что у меня длина = findlength (theString).Переменная не сохраняет возвращаемое значение

Это не проблема с домашней работой, я просто совершенно тупой, почему это простое задание не работает. Я уже объявил длину, поэтому я знаю, что это не проблема. Я также не получаю сообщений компилятора. Любая помощь будет принята с благодарностью.
Редактирование: я знаю, что конвертер не делает ничего полезного, и цикл for должен быть исправлен, но это не должно привести к правильному возврату findLength? Second Edit: Я всегда подавал строку «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 
+0

'i = 0' - Что-то подсказывает, что вы не имели в виду, что это ваш условный цикл for-loop. Увеличьте уровни предупреждений. И если вы перечислили это в обратном направлении, он должен прочитать 'for (i = theLength; i -;)' – WhozCraig

+0

Да, необходимо, чтобы преобразование было исправлено, но проблема, которую я имею, не связана с функцией преобразования. Мне интересно, почему возвращаемое значение findLength не сохраняется в переменной длины int. – theBigDream

+0

Это очень помогло бы, если бы вы включили строку ввода * verbatim *, с которой вы тестируете. После адресации, упомянутого выше, [см. Его вживую] (http://ideone.com/T6nOgH). Также исправьте свое неопределенное начальное значение 'sum' – WhozCraig

ответ

2

Переменная 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); 

Обратите внимание на \n до %d в последнем printf заявлении. Это 0, потому что ваша функция convert должна быть исправлена, и это значение resultNOTlength.

+0

Что не так с моими заявлениями printf? Я знаю, что они не на 100% организованы, но они должны по-прежнему правильно показывать правильное значение? – theBigDream

+1

@theBigDream Они показывают правильное значение, я думаю, что именно так они заказаны, что вас смущает. В настоящее время, если вы ввели «324», как упоминалось в вашем вопросе, ваш код выводит «330 \ nthe результат». ** ** ** находится от 'result', а не' length'. – IKavanagh

+1

Ох ...Я вижу, что я идиот, я предположил, что в моих заявлениях printf число будет идти после предложения. – theBigDream

Смежные вопросы