2017-01-10 3 views
0
#include <stdio.h> 
#include <conio.h> 

#define MAX 25 
char welcomeMsg[]="Please enter your name without * or #"; 
char errorMsg[]="Error, please try again"; 
void main(void) 
{ 
    int j; 
    char name[MAX],input; 
    j=0; 
    printf("%s\n", welcomeMsg); 

do 
{ 
gets_s(name,24); 
if(name[j]=='#'|| name[j]=='*') 
{ 
    printf("%s\n", errorMsg); 
    j=0; 
    continue; 
} 
name[j]=name[j]+j; 

j++; 

}while(name[j]<25&&name[j]!='\n'); 

name[j]=0;NULL; 

puts("\nYour Name is"); 
printf("%s",name); 
} 

확실하지, 문자열의 첫번째 chracter가 표시됩니다 확실하지 않다 :( 을 그것은 문자열을하고 내 처음 내가 아주 새로운 해요 .?..에서 name[j]<25나는 프로그램이 실행될 때

: C++ 그래서 필사적으로 실제로 무엇이 잘못되었는지에 도움을 필요로하는 이유는 전체 표시 내 문자열이 아닌 단 1 개 문자가 표시

+1

잠깐 (말장난 의도) :'while (name [j] <25 && name [j]! = '\ n')'로 대답 할 때 대답을 알아 내는데 몇 분 밖에 걸리지 않습니다. . 그렇지 않은 경우 이제 디버거를 사용하는 방법을 배울 수있는 좋은 기회입니다. –

+8

이것이 C++ 인 경우 배우는 데 사용하는 참조 자료를 ** 즉시 포기하고 [더 나은 것으로 전환]해야합니다 (http://stackoverflow.com/questions/388242/the-definitive-c -book-guide-and-list) 최대한 빨리. – WhiZTiM

답변

4

을 문제는 당신의 루프 조건이 식입니다 첫 번째 반복은 name[1]25을 비교합니다. 가정 할 때 the ASCII alphabet 그 문자가 제어 문자가 아니라면 루프가 종료되고 종료자를 name[1]으로 설정합니다.

원하는 조건은 j < 25입니다. 아마 문자열 종결 자에 대한 검사도 추가해야합니다.

방금 ​​디버거를 사용하고 코드를 단계별로 실행했다면 매우이었을 것입니다. 다음 번엔 먼저 해봐.

관련 문제