C言語では、値と配列の整数の配列を取り、配列内に値がある場合はその値を見つけるためのプログラムをC言語で作成しました。scanf()の2回の使用は呼び出し順序に依存します
ここでは、scanfの使用に関するすべての問題と関連トピックをStackoverflowで見てきました。
逆の順序で2つのscanf関数を呼び出すと、違いがあることに気付きました。
私はコードを以下のように使用します。最初に値を読み取り、配列からユーザーの後に、プログラムとscanfは期待通りに機能します。
printf("Enter the value to be searched in the Array: ");
int k;
scanf(" %d", &k);
printf("Type elements of A(sorted) separated by spaces (type 'end' to stop): ");
i = 0;
while(scanf("%d", &A[i]) == 1) {
i++;
}//while
私は逆の順序でのscanf入力を使用する場合は、2番目のscanfは、ユーザー入力を取得し、バッファに残った値を読み取るために停止することはありませんが。
printf("Type elements of A(sorted) separated by spaces (type 'end' to stop): ");
i = 0;
while(scanf("%d", &A[i]) == 1) {
i++;
}//while
printf("Enter the value to be searched in the Array: ");
int k;
scanf(" %d", &k);
私は、呼び出し順序の違いを理解できません。 私は他のスレッドで言及されている解決策を試しましたが、うまくいきませんでした。ただ、ここに参照として
は、全体のコード(として期待される作業)である:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int ternarySearch(int A[], int l, int r, int k){
int i;
int first,second;
if(l>r){
return -1;
}
i= (r - l)/3;
if(i==0){
i++;
}
first = i+l-1;
second = i*2+l-1;
if(A[first]==k){
return first;
}
else if(A[first]>k){
ternarySearch(A, l, first-1, k);
}
else
{
if(A[second]==k)
return second;
else
if(A[second]>k)
ternarySearch(A, first+1,second-1, k);
else
ternarySearch(A, second+1,r, k);
}
}
int main(){
const int maxarraylen = 1000;
int i;
int n;
int A[maxarraylen];
char string[250];
printf("Enter the value to be searched in the Array: ");
int k;
scanf(" %d", &k);
printf("Type elements of A(sorted) separated by spaces (type 'end' to stop): ");
i = 0;
while(scanf("%d", &A[i]) == 1) {
i++;
}//while
n=i-1;
//We assume the array is sorted otherwise we can use any sorting algorithm e.g. code from task1
scanf(" %d", &k);
int result;
result=ternarySearch(A, 0, n, k);
if(result==-1){
printf("The value was not found in the Array.\n");
}
else{
printf("The value was found in position no. %d.\n", result);
}
return 0;
}
あなたはあなたのコードをインデントし、理解を助けるためにまともな変数名を使用することが必要です。
ソリューションは、我々は、配列の値を受け取ったことを確認した直後にこのスニペットを挿入することです。 – Attie
完全なコードは、誰かがプログラムを実行したい場合にのみ参照として使用されます。この問題に関連する重要な行は 'scanf("%d "、&k);'と 'scanf("%d "、&A [i])== 1です。コマンドラインからの整数 –
scanfはキャリッジリターン '\ r'および/または改行文字 '\ n'を削除しますか?これは片方向が機能する理由ですが、他方はありませんか? **作品は? –