2016-06-03 1 views
-4

저는 C로 프로그램을 배우는 초보자입니다. 현재 사용자로부터 이름 입력을 받아 그 이름을 다시 화면에 출력하는 프로그램을 만들고 있습니다. . 프로그램이 다른 경우 블록의 이름을 인쇄 할 때, 내가 무엇을 얻을 것은 내가 그런 일이 내가이 문제를 해결하는 방법을 이유를 알고 싶다 "$입니다 다음과 같이 내 코드는 다음과 같습니다. 당신은내 인쇄 명세서가 다른 결과를 산출하게하는 원인은 무엇입니까?

#include <stdio.h> 
#include <stdlib.h> 
int main() { 
    char * ans; // yes/no answer 
    char * name; //name variable 

    printf("Welcome to the program. Would you like to begin? (y/n)\n"); 
    scanf("%s", ans); 

    if (strcmp(ans, "y") != 0) { 
     printf("Have a good day!\n"); 
     return 0; 
    } 
    else if (strcmp(ans, "y") == 0) 
     printf(" %s\n", ans); 

    printf("Okay, input your name:\n"); 
    scanf("%s", name); 

    printf(" %s", name);// I get $ " rather than the name. 

    return 0; 
} 
+0

1). 포인터가 뭔지 알아? 2). ans와 name은 포인터라는 것을 알고 있습니까? 삼). 도움이 필요 없으면 Good C 책이 필요합니다. – Michi

답변

2

있습니다 scanf()을 사용하여 사용자의 문자를 읽지 만 그 문자를 저장할 메모리를 할당하지 않았습니다. 이렇게 규칙을 위반하면 "아무 일도 일어나지 않습니다".

초기화되지 않은 포인터를 배열로 만듭니다. 대신 :

char ans[128]; 
char name[128]; 

이것은 각 문자열에 대해 128 문자의 공간을 제공합니다 (그 중 하나는 종결자가 사용합니다).

+2

그야말로 너도 알다시피 총 멀티 뎁. –

관련 문제