2017-03-09 1 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; 
} 

나는 이것을 몇 시간 동안 디버깅 해왔다. 무엇이 잘못되었는지에 대한 수정? 감사! 모든 char

+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

첫째는 문자열 형식이 아닙니다, 그것은 하나의 문자를 저장하는 데 유용 정수 크기가 1 바이트로 1 유형, 그래서

char var1 = "A"; 

을 변경해야 yuo

const char *var1 = "A"; 

var2와 같은 한 다음를 사용하는 2, 0 잘못된 시도

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

그리고


1 그것은 원칙적으로 로그인되어 READ THE DOCUMENTATION. 이 정의입니다 리터럴 문자열을 가리키는 때문에

2 사용 const, 읽기 전용.

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

대신 두 사람의 작은 따옴표를 사용해야합니다 문자를 초기화하려면 :

1

코드에 근본적인 문제는 암시 적으로 다음 코드를 사용하여 정수에 대한 포인터를 변환하고 있다는 점이다. C 컴파일러는 실제로 "A"를 int로 변환하는 문자에 대한 포인터로 해석하고 C에서 문자가 실제로 오류가 생성되지 않는 정수이기 때문에 불행히도 오류를주지 않습니다. 당신은 단지 하나의 문자를 읽으려면

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

, 당신은 아마도 getchar를 사용하려면 : 그런데

, 당신은 형태의 경고를 받았어야 (GCC 5.3.0로 컴파일) 함수 대신 scanf입니다.