>source

구문 오류가 계속 발생하고 루프를 완료하지 않는 곳을 찾을 수 없습니다. 내 프로그램은 변환 후 사용자에게 다시 할 것인지 묻고 예인 경우 옵션 메뉴를 다시 표시 한 후 변환 할 대상을 쿼리하는 것입니다.

누군가 내가 어디로 잘못 가고 있는지 말해 줄 수 있습니까?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){ 
    char answer;
    int selection;
    int again = 0;
    printf("Select Conversion:\n");
    printf("(1.)Hex to Binary\n(2.)Binary to Hex\n");
    scanf("%d", &selection);
    while (again != 1) 
    {
        if (selection ==1)
        {
            char bin2[1000], hexa2[1000];
            long int a = 0;
            printf("Enter a hex or binary value: "); 
            scanf("%s", &hexa2);
            printf("\nBinary value: ");
            while (hexa2[a])
            {
                switch (hexa2[a])
                {
                case '0':
                    printf("0000"); 
                    break;
                case '1':
                    printf("0001"); 
                    break;
                case '2':
                    printf("0010"); 
                    break;
                case '3':
                    printf("0011"); 
                    break;
                case '4':
                    printf("0100"); 
                    break;
                case '5':
                    printf("0101"); 
                    break;
                case '6':
                    printf("0110"); 
                    break;
                case '7':
                    printf("0111"); 
                    break;
                case '8':
                    printf("1000"); 
                    break;
                case '9':
                    printf("1001"); 
                    break;
                case 'A':
                    printf("1010"); 
                    break;
                case 'B':
                    printf("1011"); 
                    break;
                case 'C':
                    printf("1100"); 
                    break;
                case 'D':
                    printf("1101"); 
                    break;
                case 'E':
                    printf("1110"); 
                    break;
                case 'F':
                    printf("1111"); 
                    break;
                case 'a':
                    printf("1010"); 
                    break;
                case 'b':
                    printf("1011"); 
                    break;
                case 'c':
                    printf("1100"); 
                    break;
                case 'd':
                    printf("1101"); 
                    break;
                case 'e':
                    printf("1110"); 
                    break;
                case 'f':
                    printf("1111"); 
                    break;
                default:
                    printf("\n Invalid hexa digit %c ", hexa2[a]);
                    return 0;
                }
                a++;
            break;
            }
        }   
            
        if (selection == 2)
        {
            long int bin, hex = 0, i = 1, left;
            printf("Enter Binary Number: \n");
            scanf("%ld", &bin);
            while (bin != 0)
            {
                left = bin % 10;
                hex = hex + left * i;
                i = i * 2;
                bin = bin / 10;
            }
            printf("Hexadecimal value: %lX", hex);
        }
        printf("\nContinue(Y/N)?\n");
        scanf("%s", &answer);
        if (answer=='Y'||answer=='y')
            {
                again = again +2;
            }
            else
            {
                again=1;
            }
        }
    }
    printf("Exit");
    return 0;
    
}

구문 오류가 계속 발생하고 루프를 완료하지 않는 곳을 찾을 수 없습니다. 내 프로그램은 변환 후 사용자에게 다시 할 것인지 묻고 예인 경우 옵션 메뉴를 다시 표시 한 후 변환 할 대상을 쿼리하는 것입니다.

누군가 내가 어디로 잘못 가고 있는지 말해 줄 수 있습니까?

  • 답변 # 1

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main(void){
        char answer;
        int selection;
        int again = 0;
        printf("Select Conversion:\n");
        printf("(1.)Hex to Binary\n(2.)Binary to Hex\n");
        scanf("%d", &selection);
        while (again != 1)
        {
            if (selection ==1)
            {
                char bin2[1000], hexa2[1000];
                long int a = 0;
                printf("Enter a hex value: ");
                scanf("%s",hexa2); //hexa2 is the pointer &hexa2 is invalid.
                printf("\nBinary value: ");
                while (hexa2[a])
                {
                    switch (hexa2[a])
                    {
                    case '0':
                        printf("0000");
                        break;
                    case '1':
                        printf("0001");
                        break;
                    case '2':
                        printf("0010");
                        break;
                    case '3':
                        printf("0011");
                        break;
                    case '4':
                        printf("0100");
                        break;
                    case '5':
                        printf("0101");
                        break;
                    case '6':
                        printf("0110");
                        break;
                    case '7':
                        printf("0111");
                        break;
                    case '8':
                        printf("1000");
                        break;
                    case '9':
                        printf("1001");
                        break;
                    case 'A':
                        printf("1010");
                        break;
                    case 'B':
                        printf("1011");
                        break;
                    case 'C':
                        printf("1100");
                        break;
                    case 'D':
                        printf("1101");
                        break;
                    case 'E':
                        printf("1110");
                        break;
                    case 'F':
                        printf("1111");
                        break;
                    case 'a':
                        printf("1010");
                        break;
                    case 'b':
                        printf("1011");
                        break;
                    case 'c':
                        printf("1100");
                        break;
                    case 'd':
                        printf("1101");
                        break;
                    case 'e':
                        printf("1110");
                        break;
                    case 'f':
                        printf("1111");
                        break;
                    default:
                        printf("\n Invalid hexa digit %c ", hexa2[a]);
                        return 0;
                    }
                    a++;
                    break;//You were giving a break here. which was giving incorrect result
                }
            } //And here you were giving extra '}'
            if (selection == 2)
            {
                long int bin, hex = 0, i = 1, left;
                printf("Enter Binary Number: \n");
                scanf("%ld", &bin);
                while (bin != 0)
                {
                    left = bin % 10;
                    hex = hex + left * i;
                    i = i * 2;
                    bin = bin / 10;
                }
                printf("Hexadecimal value: %lX", hex);
            }
            printf("\nContinue(Y/N)?\n");
            scanf("%s", &answer);
            if (answer=='Y'||answer=='y')
                {
                    again = again +2;
                }
                else
                {
                    again=1;
                }
            }
            printf("Exit");
        return 0;
        }
    
    

    이제 잘 작동합니다. 코드의 주석을 참조하십시오. 잘못된 코드에 주석을 달았습니다.

  • 답변 # 2

    게시 한 코드에는 } 보다 { . 여분을 제거하십시오 } 여기:

           if (answer=='Y'||answer=='y')
                {
                    again = again +2;
                }
                else
                {
                    again=1;
                }
            }
    
    

    또한 변경 scanf("%s", &hexa2); ...에 scanf("%s", hexa2); . 에 대한 %s , ㅏ char * 전달되어야합니다. hexa2 1000의 배열입니다. char ( char [1000] ), 그래서 &hexa2 1000 배열에 대한 포인터 char ( char (*)[1000] ). 사용할 때 hexa2 인수로 첫 번째 인수에 대한 포인터로 자동 변환되므로 char * .

관련 자료

  • 이전 css - 여러 색상 행이있는 마우스 오버 테이블
  • 다음 python - 이 스도쿠 솔버가 아무것도 해결하지 않고 동일한 보드를 반환하는 이유는 무엇입니까?