該演算法是一種線性搜索演算法,可以找到所需的值。但是當我編譯這段代碼時,在 if(dizi[i]==aranan) 這一行給出了分段錯誤。我該如何解決這個問題?
#include <stdio.h>
int N,i,aranan;
int ArrayBastir(int *dizi,int N)
{
printf("My numbers\n");
for(int i =0; i<N;i )
{
printf("%d\n", dizi[i]);
}
}
int findValue()
{
printf("The value you want to search");
scanf("%d",&aranan);
}
int Output(int *dizi,int N,int aranan)
{
for(int i =0; i<N;i )
{
if(dizi[i]==aranan)
{
printf("%d number %d. found in queue \n", aranan,i 1);
}
}
}
int main() {
int N;
int aranan;
printf("Please enter how many numbers you want to enter");
scanf("%d", &N);
int dizi[N];
for(int i =0; i<N;i )
{
scanf("%d", &dizi[i]);
}
ArrayBastir( dizi, N);
findValue(aranan);
Output(*dizi,N,aranan);
return 1;
}
線性搜索演算法
uj5u.com熱心網友回復:
您有兩個物件定義為:
int aranan;
一次是在檔案范圍(全域)定義的,一個是在main.
呼叫時,將范圍內的未初始化值的findValue(aranan)副本傳遞給。缺少原型,未宣告其引數,因此將被忽略。arananmainfindValuefindValue
findValue將一個值掃描到檔案范圍內aranan,但在Output(*dizi, N, aranan)呼叫時使用aranan定義在其中的值main。arananwithinmain從未初始化,因此這會導致Output搜索不確定的值。
此外,*diziis an int,當Output期望 anint *作為其第一個引數時。
ArrayBastir并且Output也被定義為每個回傳一個int,他們不這樣做。
您不應忽略 的回傳值scanf,因為它表示成功轉換的次數,或失敗時的負值 ( EOF)。在這么小的程式中,您可以撰寫一個簡單的包裝函式來讀取整數,如果用戶輸入無效的內容,該函式將退出程式。
main回傳非零值通常表示您的程式失敗。main很特別——它是唯一可以省略 return 陳述句的非 void 函式。如果main在沒有顯式 的情況下到達執行結束return,則將其視為已回傳0。
可以通過避免使用全域變數并提高編譯器警告級別來捕獲明顯的型別不匹配來緩解上述問題。
對于GCC或Clang,請使用-Wall -Wextra,并可能使用-Werror。
對于MSVC,請使用/Wall,并可能使用/Wx。
最少重構:
#include <stdio.h>
#include <stdlib.h>
int get_int(void)
{
int x;
if (1 != scanf("%d", &x)) {
fprintf(stderr, "Invalid input.\n");
exit(EXIT_FAILURE);
}
return x;
}
void ArrayBastir(int *dizi, int N)
{
printf("My numbers\n");
for (int i = 0; i < N; i ) {
printf("%d\n", dizi[i]);
}
}
void Output(int *dizi, int N, int aranan)
{
for (int i = 0; i < N; i ) {
if (dizi[i] == aranan) {
printf("Found <%d> at position %d.\n", aranan, i);
}
}
}
int main(void)
{
printf("Please enter how many numbers you want to enter: ");
int N = get_int();
int dizi[N];
for (int i = 0; i < N; i ) {
dizi[i] = get_int();
}
ArrayBastir(dizi, N);
printf("Enter the value you want to search for: ");
int aranan = get_int();
Output(dizi, N, aranan);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/536608.html
上一篇:用字串中的字符填充2DARRAY
下一篇:C堆環境變數
