2012-03-26 12 views
0

私は最初の部分(質問1)と2番目の部分(質問2 )。問題は、最初の部分は、2番目の部分が起動したときに正常に実行されます。文字列を入力できず、文字列を入力せずにコードをスキップするようです。プログラムの2つの部分を実行しようとしています。第2部分は文字列を入力できません。

プログラムの最初の部分(質問1)を削除すると、すべて正常に動作し、文字列を入力できます。この問題の原因となっているのは何か

int main() 
    { 
     first(); 
     second(); 

    } 

//Question 1 

int first() 
{ 
/* dataarray.c */ 
float data[20] = { 
    50.972438, 93.765053, 9.252207, 1.851414, 16.717533, 
    71.583113, 97.377304, 20.352015, 56.309875, 0.072826, 
    23.986237, 36.685959, 80.911919, 86.621851, 53.453706, 
    96.443735, 29.845786, 18.119300, 31.079443, 52.197715 }; 

/* The number of elements in the data array */ 
int data_size = 20; 
int pos; 
int j; 
int i; 
int k; 

    printf("Question 1\n"); 

for(i=0;i<data_size;i++) 
{ 
    printf("\nArray %i is %f ",i,data[i]); //Initial arrays print statement 
} 
    printf("\n\nArray number to delete:"); //User Choose one to delete 
    scanf("%i",&pos); 

k =0; 
for(j = 0; j< pos;j++) 
{ 
    printf("\n Array %i is now %f ",k,data[j]); 
    k++; 
} 

k=pos; 
for(j=pos+1;j<data_size;j++) 
{ 
    printf("\n Array %i is now to %f ",k,data[j]); //Shows array changed to 
    k++; 
} 
data_size = data_size - 1; //Decreases data size 
} 

//Question 2 

int second() 
{ 
    printf("\n\nQuestion 2\n"); 

int a,b,check=0; 
char str[20]; 
    printf("\nEnter a String:\n"); //User inputs word to check if its palindrome 
gets(str); 

for(b=0;str[b]!=0;b++); //Starts at 0 increment till the last length 
b=b-1; 
a=0; 
while(a<=b) 
{ 
    if(str[a]==str[b]) //String a is forwards b is backwards 
    { 
     a=a+1; 
     b=b-1; 
     check=1; //If check = 1 then a palindrome 
    } 
    else 
    { 
     check=0; //If check = 0 then it not a plaindrome 
     break; //Loop break 
    } 

} 

if(check==1) 
    printf("It is a Palindrome:"); //Statement printed if check = 1 
else 
    printf("It is not a Palindrome\n"); // Else if 0 this statement is printed 

} 
+0

私はあなたがコンパイラの警告をすべて終わらせ、きれいなコンパイルを得るために働くなら、あなたは最も速く進むと思う。 –

+0

そして、私はgets()に気付きました。 [決して、決してgets()](http://c-faq.com/stdio/getsvsfgets.html)を使用しないでください。 –

答えて

1

scanfを1部で呼び出すと、改行の後に数字を入力すると仮定します。 scanfは数値を消費しますが、改行はバッファに残ります。パート2のgets()は改行を見て、空行を返します。簡単な解決策はところで

scanf("%i\n", &pos); 

を行うことです、決して使用が取得します。代わりにfgetsを使用してください。

+0

私は申し訳ありませんが、私はcで新しいことを理解しませんでした。もっと詳しく説明しましょう。 –

+0

@Amandeep scanf形式の文字列に\ nを追加すると、問題は解決しますか?それがなければ、scanfは入力された数字だけを消費し、改行をバッファに残します。その後、getsを呼び出すと、改行が消費され、バッファに空白行が返されます。 '\ n'を追加すると、整数が読み込まれたときに後続の改行が使用されるため、より多くの入力が入力されるまでブロックが取得されます。また、それは頻繁に十分に記述することはできません - 取得を使用しないでください! –

+0

はい、それは問題を引き起こしましたが、コードが私のための方法は今質問1がうまく動作します。その質問2は問題2の問題です。文字列を入力できません。私はあなたが言った方法を試みたが、それはactullyそれを悪化させるのに役立つdoesnt。 –