2017-01-10 9 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が表示されているかわからない:( をそれは文字列をやって私の最初の時間だと私はに非常に新たなんです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です。おそらく文字列ターミネータのチェックも追加するべきでしょう。

これは、デバッガを使用してコードをステップ実行したばかりの場合、非常にになります。次回はまずそれをしてください。

関連する問題