728x90

1.scanf에서 수정하기

scanf는 공백과 엔터가 나오면 입력을 더이상 받지않기때문에

공백을 포함한 문자열을 받을때 다른방법을 사용하거나 몇가지 작업을 해야한다

scanf("%[^\n]s",&name[i]);

^\n의 의미는 엔터를 만날때까지 읽으라는 뜻이다

이것을 사용하면 scanf에서 공백을 인식할수있다

2.gets함수를 사용하기

cpp확장자에서는 gets함수를 사용할수없으므로

사용하려면 확장자를 c로 바꿔야한다

gets(name[i]);//gets 함수는 공백까지 포함하여 받을수있다 대신 확장자가 .cpp가아닌 .c이여야만한다
printf("%s\n", name[i]);

 

2차원배열과 배열끼리의 연산으로
학생들의 성적의 평균과 합을 구하고 출력하는 예제입니다

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


#pragma warning(disable:4996)//scanf 함수 사용을 위해

#define MAN 2//몇명의 데이터를 받을것인지 정한다
int main() {
	int i;
	int sum[MAN+ 1]; int ave[MAN + 1]; int kor[MAN + 1];//배열생성 학생별로 배열을 생성한것이아닌
	int eng[MAN+ 1]; int math[MAN + 1]; int his[MAN + 1];//과목별로 배열을 생성하였다
	int sci[MAN+ 1];
	char name[MAN + 1][10];//[행][열]2차원배열이다 
	
	for (i = 1; i <= MAN; i++) {//명수만큼 반복할것이다
		printf("%d번째 이름입력: \n", i);
		printf("문자열을 입력하세요: ");
		scanf("%[^\n]s",&name[i]);//scanf 함수는 공백을 받을수없는데 이렇게 사용하면 가능하다
		//gets(name[i]);//gets 함수는 공백까지 포함하여 받을수있다 대신 확장자가 .cpp가아닌 .c이여야만한다
        printf("%s\n", name[i]);//이름을 받고 출력한다


		printf("국 영 수 역 과 입력\n");
		scanf("\n%d\t%d\t%d\t%d\t%d%*c", &kor[i], &eng[i], &math[i], &his[i], &sci[i]);
		printf("\n이름:%s \t 국%d\t영%d\t수%d\t역%d\t과%d\n\n\n", name[i], kor[i], eng[i], math[i], his[i], sci[i]);
		}
        
        
	printf("순번\t이름\t국어\t영어\t수학\t국사\t과학\t총점\t평균\n");
	printf("=======================================================================\n");
	for (i = 1; i <= MAN; i++) {//명수만큼 출력할것이다
		sum[i] =  kor[i] + eng[i] + math[i] + his[i] + sci[i];//합
		ave[i] = (( kor[i] + eng[i] + math[i] + his[i] + sci[i])/5);//평균
		printf("순번%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",i, name[i], kor[i], eng[i], math[i], his[i], sci[i],sum[i],ave[i]);
	}
	printf("=======================================================================\n");
	
}
728x90

+ Recent posts