작성일 : 15-03-20 17:37
이건 무슨 오류인가요?
 글쓴이 : 김연경(kyj720)
조회 : 3,218  

상세한 설명 항상 감사드립니다.^^

두 가지 질문이 있습니다.

첫째,
파일입출력 자가진단1.을 아래와 같이 하여 정올에 채점을 넣었더니..

-A Not allowed system call: runid:709367 : 파일이나 프로세스 등의 자원에 경우에 대한 무단 액세스를 확인
이라는 에러가 뜹니다.
#include <stdio.h>
int main()
{
    int i,a,b,sum=0;
    FILE *in=fopen("input.txt","r");
    FILE *out=fopen("output.txt","w");

    fscanf(in,"%d %d",&a,&b);

    for (i=a;i<=b;i++){
        sum=sum+i;
    }

    fprintf(out,"%d",sum);
    fclose(in);
    fclose(out);
    return 0;

}
해결 방법 좀 가르쳐 주세요


둘째

저는 프로그램을 짤 때 선언하는 배열과 본문의 배열(?)이 항상 헷갈립니다.

예를 들어, char[20][10]을 정의해야 나중에 본문에서 char[i]를 쓸 수 있는 이유 같은..

(char[20]이라 정의하고 본문에 char[i]를 사용하면 오류가 뜨더라구요..)

대표적인 것이 아래 프로그램입니다.

파일입출력 문제3을 제 생각대로 만들었는데

#include <stdio.h>
int main()
{

   char na[100][20],imsi;
   int i,j,po[100],ra[100]={1},cnt=0,imsi2[100];

   for(i=0; ;i++){
    scanf("%s %d",na[i],&po[i]);
    cnt=cnt+1;
    if (scanf("%s %d",na,&po)<2) break;
   }

   for (i=0;i<=cnt;i++){
    for (j=0;j<=cnt;j++){
        if (po[i]<po[j]){
            ra[i]=ra[i]+1;
        }
    }
   }
   for (i=0;i<=cnt;i++){
    for (j=0;j<=cnt;j++){
        if (ra[i]<ra[j]){
            imsi=na[i];
            na[i]=na[j];
            na[j]=imsi[i];
            imsi2[i]=po[i];
            po[i]=po[j];
            po[j]=imsi2[i];
        }
    }
   }
   for (i=0;i<=cnt;i++){
    printf("%s %4d %4d\n",na[i],po[i],ra[i]);
 }

}

imsi가 invalid conversion from 'char*' to 'char' [-fpermissive]라고 오류가 뜨면 걸립니다.

프로그램 작성에서 배열 정의를 어떻게 해야 하는지 설명해주시면 정말 감사하겠습니다.



황성진 15-03-21 12:15
 
정올 파일입출력 체점 안돼요
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
컴스쿨 15-03-24 15:58
 
우선 정올사이트에서 현재 파일입출력으로 채점이 안됩니다. 화면 입출력으로 작성해서 채점받으셔야 합니다.

다음 문자열이란 단어나 문장을 하나의 변수처럼 사용할 수 있도록 문자배열의 형태로 선언하고 관리하는 것입니다.
문자배열의 처음부터 차례대로 문자가 들어가다가 널값('\0', 아스키코드=0)이 있는 바로 앞 까지를 하나의 단어 또는 문장으로 인식하도록 약속된 형태입니다.

char a[20]; 이렇게 선언을 하면 문자 20개를 담을수 있는 문자배열도 되지만
문자 19개까지를 포함할 수 있는 한개의 문자열이 될 수도 있는 것입니다.

따라서 scanf("%s", a);, 또는 printf("%s", a); 이렇게 한개의 변수처럼 사용이 가능한 겁니다.

char na[100][20]; 이렇게 선언했다면 문자 19자까지 담을 수 있는 100개짜리 문자열 배열이 되는 것입니다.
그러므로 문자열로 입력과 출력을 위해서는 배열의 형태 na[i] 로 입출력이 가능한 것입니다.
scanf("%s %d",na,&po); 이렇게 하면 오류가 되겠지요.

그리고 na[i]는 문자열이므로 이것을 다른 곳으로 옮겨 담기 위해서는 문자열이 되어야 합니다.
위에서 char imsi; 라고 하면 imsi는 문자열이 아니기 때문에 오류가 나는 겁니다.
char imsi[20]; 처럼 문자열로 선언을 해야합니다.

또한 문자열의 경우는 정상적인 변수가 아니기 때문에 일반적인 연산자를 사용할 수 없습니다.
그것을 가능하게 하기 위해 여러가지 함수를 제공합니다.

예를 들어 imsi = na[i]; 는 strcpy(imsi, na[i]); 로 써야 하고
if (ra[i]<ra[j]) 도  if (strcmp(ra[i],ra[j]) < 0) 이렇게 써야 합니다.
자기주도 C언어 프로그래밍에서는 2단원에 걸쳐 문자열 단원을 할애하고 이러한 내용을 상세하게 다루고 있습니다.
 
 

Total 623
번호 제   목 글쓴이 날짜 조회
323 초등 지역 예선준비 문의합니다. (2) 남정식 04-06 2350
322 정보올림피아즈 지역예선 질문 (1) 이원진 04-06 2384
321 참 궁디합니다 (1) 강서준 04-04 2352
320 결제확인부탁드립니다 (1) 황지훈 04-03 2017
319 결제 확인 부탁드려요. (1) 안준표 03-29 2221
318 배열2 자가진단6 (1) 김주영 03-29 3685
317 2014년 예선 정보올림피아드 25번 풀이 (1) 이수연 03-28 2927
316 정보올림피아드 2014년예상기출문제34번 (1) 유양숙 03-27 6367
315 동영상 재생이되지 않습니다. (1) 왕수진 03-24 2604
314 2014년 초등 기출문제 31번 (1) 김유미 03-24 2321
313 잘 모르겠습니다. (4) 김연수 03-22 2210
312 반복제어문3 형성평가2 (1) 김주영 03-21 3270
311 이건 무슨 오류인가요? (2) 김연경 03-20 3219
310 2014년 정올 예선문제 중고등부 문제 28번...문의 (1) 이미화 03-20 4148
309 2014년 지역본선 문제2. 자리배정 문제 (3) 김연경 03-18 2671
308 정보올림피아드 예상기출문제31번 (1) 유양숙 03-18 10006
307 문자열2. 형성평가 3번, 형성평가 6번 무엇이 잘못되었는지? (1) 김연경 03-17 3314
306 자기주도 C언어 프로그래밍 일련번호 오류! (2) 최훈오 03-15 2383
305 문자열2, 자가진단 7번 (1) 김연경 03-14 3245
304 왜죠? (1) 황성진 03-14 2191
 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30    

회사소개 | 개인정보처리방침 | 이용약관 | 찾아오시는 길 | 이메일주소 무단수집거부 | 사업자정보확인
경기도 안양시 동안구 호계동 1065-10 협성골드프라자 601호 한컴에듀케이션(주) TEL : 031-388-8840 FAX : 031-388-0996
대표자 : 김동규 사업자번호 : 130-86-02870 통신판매업신고번호 : 제 2010-경기안양-888호
COPYTIGHT(C) 한컴에듀케이션(주), ALL RIGHT RESERVED.
담은강좌 : 0