所以我想要这个输出:
Position you wanted to insert
2
Value You wanted to insert
34
Array after insertion:
10 5 34 46 2 100 97
但它无法向我显示输出,我该怎么办请帮助我,并修复它..
#include <stdio.h>
#include <conio.h>
int main(){
int arr[100] = {10, 5, 46, 2, 100, 97};
int n, max, i;
n = 0;
clrscr();
if(i > n){
printf("postion you wanted to insert");
scanf("%d", &n);
}
printf("Value for position: \n");
scanf("%d", &max);
for(i=7; i>n-1; i--){
arr[i+1] = arr[i];
arr[n] = max;
}
printf("Array after insertion: \n");
for(i = 0; i < 7; i++){
printf("%d\t", arr[i]);
}
getch();
}
答案 0 :(得分:2)
您没有为int i分配任何值,因此编译器会将垃圾值分配给变量i,因此您无法获得输出。
你需要做这样的事情
void main()
{
int n,val,i;
int arr[100] = {10,20,30,40,50};
printf("enter the position where you want to insert the new element \n");
scanf("%d",&n);
print("Enter the value you want to insert");
scanf("%d",&val);
for(i=5,i>=n,i--)
{
arr[i+1]=arr[i];
}
arr[n]=max;
/*then print your array*/
getch();
}
答案 1 :(得分:1)
在要插入的索引(即第一个循环)之后移动项目的循环是错误的。您使用六个条目(索引0
到5
启动数组。但是您开始使用索引7
进行循环,这意味着您将arr[7]
移动到arr[8]
。
但这只是该循环问题的 start 。您然后在每个循环中将arr[n]
设置为您要插入的值。因此,当您想要移动arr[n]
的原始值时,该值已被多次覆盖。
答案 2 :(得分:0)
你这样做:
if(i > n) {
printf("postion you wanted to insert");
scanf("%d", &n);
}
但是i
未初始化。
试试这个:
#include <stdio.h>
#include <conio.h>
int main(){
int arr[100] = {10, 5, 46, 2, 100, 97};
int n, max, i = 7;
n = 0;
clrscr();
if(i > n){
printf("postion you wanted to insert");
scanf("%d", &n);
}
printf("Value for position: \n");
scanf("%d", &max);
for(i=7; i>n-1; i--){
arr[i+1] = arr[i];
arr[n] = max;
}
printf("Array after insertion: \n");
for(i = 0; i < 7; i++){
printf("%d\t", arr[i]);
}
getch();
}
但你不需要这个条件if(i > n)
。
答案 3 :(得分:0)
您不需要if
声明:
#include <stdio.h>
#include <conio.h>
int main() {
int arr[100] = {10, 5, 46, 2, 100, 97};
int n, max, i;
n = 0;
clrscr();
// no need for if statement here
printf("postion you wanted to insert");
scanf("%d", &n);
printf("Value for position: \n");
scanf("%d", &max);
for(i=6; i>n-1; i--) {
arr[i+1] = arr[i];
arr[i] = max;
}
printf("Array after insertion: \n");
for(i = 0; i < 7; i++) {
printf("%d\t", arr[i]);
}
getch();
}
if
语句使用您尚未初始化的i
。由于您想要求用户提供职位,因此您不需要if
声明。
您还需要修复for
循环(i
以6开头,您需要arr[i] = max
代替arr[n] = max
。)
答案 4 :(得分:0)
变化
for(i=7; i>n-1; i--) {
arr[i+1] = arr[i];
arr[n] = max;
}
到
for(i=7; i>n-1; i--)
arr[i+1] = arr[i];
arr[n] = max;
答案 5 :(得分:0)
修正:
for(i=5; i>=n-1; i--) { //Start from end of array till n-1
arr[i+1] = arr[i];
}
arr[n-1] = max; // Make room for new element & insert at last
答案 6 :(得分:0)
这应该有效:
int main ()
{
int arr[100] = {10, 5, 46, 2, 100, 97};
int n = 6; //Number of elements in arr
int pos = 0;
int value = 0;
clrscr();
printf("postion you wanted to insert");
scanf("%d", &pos);
printf("Value for position: \n");
scanf("%d", &value);
int i;
for (i = n ; i > pos ; --i)
arr[i] = arr[i - 1];
arr[pos] = value;
++n;
printf("New array:\n");
for (i = 0 ; i < 0 ; ++i)
printf("%d ", arr[i]);
getch ();
}
答案 7 :(得分:0)
这是一个通用的解决方案。您必须小心数组中已存在的元素数量。 注意:如果您希望能够在所有可能的位置插入,请禁用第二个if语句。
帮助它:
#include <stdio.h>
#define MAX_EL 100
int main() {
int arr[MAX_EL] = {10, 5, 46, 2, 100, 97};
int n, max, i;
int nb_elements = 6 ;
n = 0;
i = 0 ;
printf("postion you wanted to insert :\n");
scanf("%d", &n);
printf("Value for position: \n");
scanf("%d", &max);
if (nb_elements >= MAX_EL) {
fprintf(stderr,"Tab is full ! \n") ;
return -1 ;
}
if (n>nb_elements-1)
n = nb_elements ;
int arr_tmp[MAX_EL] ;
for (;i<n;i++) {
arr_tmp[i] = arr[i] ;
}
arr_tmp[n] = max ;
for (i=n;i<nb_elements+1;i++)
arr_tmp[i+1] = arr[i] ;
nb_elements++ ;
memcpy(&arr[0],&arr_tmp[0],sizeof(int)*nb_elements) ;
printf("Array after insertion: \n");
for(i = 0; i < nb_elements; i++) {
printf("%d\t", arr[i]);
}
它给你输出:
10 5 34 46 2 100 97