簡體   English   中英

即使嘗試突破,while循環語法錯誤也不會編譯

[英]While loop syntax error will not compile even when trying to break out

我不斷收到語法錯誤,找不到我沒有完成循環的地方。 我的程序是查詢要轉換的內容,然后在轉換后詢問用戶是否要再次執行此操作,如果是,請再次顯示選項菜單。

有人可以告訴我哪里出錯了嗎?

#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;
    
}

我不斷收到語法錯誤,找不到我沒有完成循環的地方。 我的程序是查詢要轉換的內容,然后在轉換后詢問用戶是否要再次執行此操作,如果是,請再次顯示選項菜單。

有人可以告訴我哪里出錯了嗎?

您發布的代碼}多於{ 在此處刪除多余的}

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

另外,改變scanf("%s", &hexa2); scanf("%s", hexa2); . 對於%s ,應該傳遞一個char * hexa2是 1000 個charchar [1000] )的數組,所以&hexa2是一個指向 1000 個charchar (*)[1000] )數組的指針。 當您使用hexa2作為參數時,它將自動轉換為指向其第一個參數的指針,因此這將是一個char *

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
    char answer;
    int selection;
    do
    {
        printf("Select Conversion:\n");
        printf("(1.)Hex to Binary\n(2.)Binary to Hex\n");
        scanf("%d", &selection);
        if (selection == 1)
        {
            char bin2[1000], hexa2[1000];
            long int a = 0;
            printf("Enter a hex 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++;
            }
        }

        else 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);
    } while (answer == 'Y' || answer == 'y');
    printf("Exit");
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM