在這里,我撰寫了一個代碼,它接受一個適合用戶的任何大小的陣列,來自用戶同意在集合中插入新整數的位置,并與要插入的整數坐標。
#include <stdio.h>
#include <stdlib.h>
void insert(int barray_size, int *A, int new_place, int new_int)
{
for (int i = barray_size; i >= new_place; i = i - 1)
{
*(A i) = *(A i - 1); //copies value of cell A[i-1] to cell A[i]
*(A i - 1) = 0; //empties cell A[i-1] so that it can take the value A[i-2] in next loop
}
*(A new_place - 1) = new_int; //putting the required integer at A[k]
}
int main()
{
int n, k, l;
printf("Please enter array size: ");
scanf("%d", &n);
printf("\n");
int A[n 1];
for (int i = 0; i < n; i )
{
int temp;
printf("Enter [%d] element: ", i);
scanf("%d", &temp);
A[i] = temp;
printf("\n");
}
A[n] = 0;
printf("Enter the place where new integer is to be inserted: ");
scanf("%d", &k);
if (k < n 1)
{
printf("Enter the integer to be inserted: ");
scanf("%d", &l);
int t = n 1;
insert(t, A, k, l);
printf("The new array is: ");
for (int i = 0; i < t; i)
{
printf("%d ", A[i]);
}
}
else
{
printf("Please enter a valid address.");
}
}
但是當我運行這段代碼時,它在接受整數位置后終止,但不接受要插入的整數。你介意幫助檢測錯誤嗎?
謝謝
編輯 1:更正了 scanf 中地址的瑣碎錯誤。
現在程式或多或少正確地將整數添加到陣列中(盡管k 1如果在 處請求k,但可以更正)。但是它會A[i 1]用垃圾值列印超出陣列的所有值,盡管最后使用了應該停止列印回圈的 for 回圈A[n 1]。為什么會這樣?
(如果我的疑問是微不足道的或愚蠢的,我深表歉意。我最近開始學習 C 語言,由于缺乏練習,我很容易出現這樣的微不足道的錯誤,并且在練習時需要幫助澄清這些疑問,我在 SO 尋求幫助)
編輯 2:初始化之后A[n] = 0,之前缺少的,程式運行完美并正常終止。
感謝大家的幫助。
uj5u.com熱心網友回復:
你忘記指定變數的地址k和linscanf和你的
改變:
scanf("%d", k);
scanf("%d", l);
到:
scanf("%d", &k);
scanf("%d", &l);
改變:
for (int i = 0; i < n 1; i )
到:
for (int i = 0; i < t; i )
下面是修改后的代碼:
#include <stdio.h>
#include <stdlib.h>
void insert(int barray_size, int *A, int new_place, int new_int)
{
for(int i=barray_size; i>new_place; i=i-1)
{
*(A i)=*(A i-1);
*(A i-1)=0;
}
*(A new_place)=new_int;
}
int main()
{
int n, k, l;
printf("Please enter array size: ");
scanf("%d", &n);
printf("\n");
int A[n - 1];
for (int i=0; i<n; i )
{
int temp;
printf("Enter [%d] element: ", i);
scanf("%d", &temp);
A[i]=temp;
printf("\n");
}
printf("Enter the place where new integer is to be inserted: ");
scanf("%d", &k);
if(k < n)
{
printf("Enter the integer to be inserted: ");
scanf("%d", &l);
int t=n 1;
insert(t, A, k, l);
printf("The new array is: ");
for (int i = 0; i < t; i )
{
printf("%d ", A[i]);
}
}
else
{
printf("Please enter a valid address.");
}
}
輸出
Please enter array size: 7
Enter [0] element: 1
Enter [1] element: 2
Enter [2] element: 3
Enter [3] element: 4
Enter [4] element: 5
Enter [5] element: 6
Enter [6] element: 7
Enter the place where new integer is to be inserted: 5
Enter the integer to be inserted: 10
The new array is: 1 2 3 4 5 10 6 7
uj5u.com熱心網友回復:
在你的代碼中,當你這樣做時scanf("%d", ),你需要傳入變數的地址。不是變數本身。您可以嘗試以下操作,看看它是否有效:
int main()
{
// CODE TO READ ARRAY AS YOU HAVE ALREADY WRITTEN
printf(("Enter the place where new integer is to be inserted: ");
scanf("%d", &k); // CHANGE HERE from k to &k
printf("Enter the integer to be inserted: ");
scanf("%d", &l); // CHANGE HERE FROM l to &l
/* CHANGE HERE.
You don't need n 1 because when you create an array of size n 1, the indices are from 0 to n.
You are reading values only for 0 to n-1 in your loop.
In your insert function, you are starting at i=n which is the last free space in the array.
*/
insert(n, A, k, l)
// REST OF YOUR CODE TO PRINT THE ARRAY
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380469.html
上一篇:如何使用python和C列印字符“\n”而不是空格?[復制]
下一篇:組合不同的arityX宏
