2017-03-09 68 views
0

我已經編寫了接受用戶y/n輸入的代碼,但是在運行代碼時,控制檯只是打印出隨機和不一致的字符。交換變量並將其打印出來C

int main() 
{ 
    char var1 = "A"; 
    char var2 = "$"; 
    char user_answer; 

    printf("Do you wanna swap var1 and var2? y/n \n "); 
    scanf("%c", &user_answer); 

    if (user_answer == 'y') 
    { 
     var1 = "$"; 
     var2 = "A"; 
     printf("var1 is now: %c", &var1, "\n", "var2 is now: %c", &var2); 
    } 
    else 
    { 
     exit(0); 
    } 

    return 0; 
} 

我一直在調試幾個小時。任何錯誤的更正?謝謝!

+3

字符常量使用單引號「a''而不是」a「來編寫。你printf也是錯的。你在尋找地址而不是字符。 – StoryTeller

+0

'char var1 =「A」;'......聽編譯器警告。 –

+0

這不是交換兩個變量的最佳方法。搜索如何交換兩個變量。 – babon

回答

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

int main() 
{ 
    char var1 = 'A'; 
    char var2 = '$'; 
    char user_answer; 

    printf("Do you wanna swap var1 and var2? y/n \n "); 
    scanf("%c", &user_answer); 

    if (user_answer == 'y') 
    { 
     var1 = '$'; 
     var2 = 'A'; 
     printf("var1 is now: %c\n",var1); 
     printf("var2 is now: %c\n",var2); 

    } 
    else 
    { 
     exit(0); 
    } 

    return 0; 
} 
1

所有char首先不是一個類型,它是一個整數類型與大小爲1字節是存儲單個字符有用,所以宥需要改變

char var1 = "A"; 

到,

const char *var1 = "A"; 

var2相同,那麼你正在使用printf()個錯誤,嘗試

printf("var1 is now: %s\nvar2 is now: %s\n", var1, var2); 

而且READ THE DOCUMENTATION


它原則上簽字。

使用const因爲它指向一個字符串文字是由定義,只讀。

1

與您的代碼根本的問題是,你的指針隱式轉換爲整數,下面的代碼:

char var1 = "A"; 
char var2 = "$"; 
... 

要初始化你應該使用單引號,而不是雙那些字符。不幸的是,C編譯器不會給你一個錯誤,因爲它實際上將「A」解釋爲一個指向他轉換爲int的字符的指針,並且由於C中的字符是整數,因此不會產生錯誤。

順便說一句,你應該已經收到了形式的警告(用gcc編譯5.3.0):

jdoodle.c:2:17: warning: initialization makes integer from pointer without a cast [-Wint-conversion] 
    char var1 = "A"; 

如果你想讀只是一個單一的字符,你可能想使用getchar功能,而不是scanf

相關問題