2014-10-12 2 views
-1

В моем коде мне требуется возможность конвертировать любой целочисленный ввод в нужную базу между 2 и 16. Проблема заключается в том, что на выходе говорится, что мой код работает успешно, я не получаю никакого вывода. Я пробовал в NetBeans и терминале linux. Мой код показан ниже:Почему мой код C не выводит результат?

/* 
* File: main.c 
* Author: Tyler Weaver 
* Assignment 1: Takes a decimal value and converts it to a desired base 
* 
* Created on October 11, 2014, 11:57 PM 
*/ 

#include <stdio.h> 

void toBase(unsigned decimal, unsigned base, char *newNum); 

int main(int argc, char** argv) { 
    const int MAX_LEN = 32; 
    char newNum[32]; 
    unsigned decimal, base; 

    printf("Enter a decimal value followed by a desired base: "); 
    scanf(" %u", &decimal); 
    scanf(" %u", &base); 

    toBase(decimal, base, newNum); 

    printf("%u equals ", decimal); 
    //Print the array out in reverse order 
    unsigned count; 
    for (count = 0; count != '\0'; count++); 
    for (count--; count >= 0; count--) { 
     printf("%c", newNum[count]); 
    } 
    printf(" (base-%u)\n", base); 

    return 0; 
} 

/** 
* Converts a number to desired base 
* @param decimal the number which to convert 
* @param base the base to convert decimal to 
* @param newNum the character array which to store the conversion 
*/ 
void toBase(unsigned decimal, unsigned base, char *newNum) { 
    const unsigned ASCII_DIFF = 97; 
    char *p; 

    for (p = newNum; decimal > 0; p++) { 
     unsigned temp = decimal % base; 

     *p = (temp < 10) ? temp : ((char) temp - 10 + ASCII_DIFF); 
    } 
} 

Мой выход в NetBeans:

Enter a decimal value followed by a desired base: 6 4 

RUN SUCCESSFUL (total time: 1s) 

Он появляется то же самое на Linux терминал, а также. Я попытался разместить printf-инструкции после операторов scanf, но они тоже не отображаются. Любая информация будет полезна.

+0

Um .. 'count> = 0' в вашем условии продолжения цикла? Ну, 'count' объявлен' unsigned count; '. Можете ли вы придумать * любое * время, когда это условие не будет выполнено? (и не говорите, когда 'count' меньше нуля, потому что он не подписан, так что этого не произойдет). – WhozCraig

+0

Какова цель 'for (p = newNum; decimal> 0; p ++)'? Не должно ли условие «while» включать «p»? – wallyk

+0

Если вы ищете конец newNum, «for (count = 0; count! = '\ 0'; count ++);" не будет этого делать. Я удивлен, что вы не получаете ошибку сегментации, когда count == 0xFFFFFFFF. Подсказка: 0 == '\ 0'. –

ответ

0

Вы, кажется, работаете в бесконечном цикле внутри функции toBase.

void toBase(unsigned decimal, unsigned base, char *newNum) { 
    const unsigned ASCII_DIFF = 97; 
    char *p; 

    for (p = newNum; decimal > 0; p++) { 
     unsigned temp = decimal % base; 

     *p = (temp < 10) ? temp : ((char) temp - 10 + ASCII_DIFF); 
    } 
} 

используется decimal > 0 как условие, но вы никогда не измените значение десятичного внутри цикла.

Из-за этого весь код, написанный после вызова функции toBase(), никогда не выполняется.

Боковое примечание: меня немного беспокоит «RUN SUCCESSFUL (общее время: 1s)». Компиляция этого кода с помощью GCC и его запуск дает мне ошибку сегментации. В сочетании с проблемой бесконечного цикла я очень сомневаюсь, что программа была успешно завершена.

+0

Я запустил код на Netbeans. Это дало мне «Ran Successful», хотя выхода нет. Меня отбросили, потому что он сказал «Ran Successful». Однако я понял все бесконечные циклы в моем коде, и я благодарю вас. –

+0

В моей лаборатории linux он не говорит, что запустить успешно. Он просто не показывает результат. * –