2016-12-28 4 views
0

나는 프로그래밍에 초보자입니다. 나는 2 차원 배열 (문자) 행을 삭제하려면이 간단한 코드를 작성 :`strcpy '를 사용하여 2D 배열에서 (문자의) 행을 삭제할 때 오류가 있습니까?

#include <stdio.h> 
#include <string.h> 

#define M_RW 100 
#define M_CH 100 

void ArrIn (char a[][M_CH], int &n) 
{ 
    for (int i = 0; i < n; i++) 
    { 
     printf("a[%d] = ", i); 
     gets(a[i]); 
    } 

} 

void ArrOut (char a[][M_CH], int n) 
{ 
    for (int i = 0; i < n; i++) 
    { 
     printf("a[%d] = %s\n", i, a[i]); 
    } 
} 


void ArrDel (char a[][M_CH], int &n, int position) 
{ 
    for (int i = position; i < n - 1 ; i++) 
    { 
     strcpy(a[i+1], a[i]); 
    } 

    n--; 
} 

void main() 
{ 

    char a[M_RW][M_CH]; 
    int n, k; 

    printf("Number of row: n = "); scanf("%d", &n); 
    fflush(stdin); 
    printf("\n---\n\n"); 
    ArrIn(a, n); 
    printf("\n---\n\n"); 
    ArrOut(a, n); 
    printf("\n---\n\n"); 
    printf("Want to delete row: k = "); scanf("%d", &k); 
    fflush(stdin); 
    ArrDel(a, n, k); 
    printf("\n---\n\n"); 
    ArrOut(a, n); 
    printf("\n---\n\n"); 

} 

내가, 내가 입력 일부 데이터를 컴파일 후 :

+ n = 5; 

+ a[0] = "Careless whisper"; 
+ a[1] = "I feel so unsure"; 
+ a[2] = "As I take your hand"; 
+ a[3] = "And lead you to the dance floor"; 
+ a[4] = "..."; 

+ k = 2; 

나는이 같은 결과를보고 싶습니다 :

+ a[0] = Careless whisper 
+ a[1] = I feel so unsure 
+ a[2] = And lead you to the dance floor 
+ a[3] = ... 

, 그것은 반환

+ a[0] = Careless whisper 
+ a[1] = I feel so unsure 
+ a[2] = I feel so unsure 
+ a[3] = I feel so unsure 

이유가 모르겠다. a[1] 반복 횟수.


나를 보여줄 수 있습니까? strcpy을 사용하면 틀린 점이 있습니까?

+0

'FFLUSH (표준 입력)가 '미정의' –

+0

동작 및 INT n' 유효 C 신택스를 호출하지 않다. 참조 인수는 C++에만 있습니다. – Barmar

+0

참조에 의한 전달은 C에서 작동하지 않습니다. – haccks

답변

4

문제는 strcpy()에 대한 인수가 거꾸로 있다는 것입니다. 구문은 strcpy(destination, source), 그래서 당신이

strcpy(a[i+1], a[i]); 

를 쓸 때 당신은 그래서 다음 a[3] 다음 반복 a[4]에, 첫 번째 반복에 a[3]a[2]에서 복사하고 있습니다. 따라서 어레이의 나머지 모든 항목에 a[2]을 복사합니다. 행

변경을 :

strcpy(a[i], a[i+1]);