따라 배우는 C언어 : 9
🙇♀️9
🪐입출력 버퍼
ABC 라고 입력 -> 버퍼 buffer -> ABC 출력
입력할 때마다 한 글자 씩 버퍼로 이동 -> 버퍼에 담긴 내용이 통째로 전달
char c;
while ((c = getchar()) != '.')
{
putchar(c);
}
문자를 입력하면 바로 출력하는게 아니라 모았다가 한꺼번에 출력함
🪐파일의 끝 End Of File
운영체제가 입력이 끝났다는 것을 알려줌.
- ctrl + z 후 엔터하면 콘솔 닫음
- ctrl + c 는 바로 콘솔 닫음
🪐입출력 방향 재지정
cmd에서 실행파일을 실행할 때 HJM_7.exe > output.txt
를 입력하면 메모장으로 출력 결과가 나온다. output은 이름이므로 바꿔도 됨.
메모장에 입력된 것을 실행파일로 쓸려면 HJM_7.exe < input.txt
을 하면 된다.
HJM_7.exe < input.txt > output.txt
를 하면 입력받은 실행결과를 다시 메모장에 옮긴다.
HJM_7.exe >> output.txt
를 하면 파일이 덧붙여진다.
copy HJM_7.exe test.exe
를 한 후 test.exe | HJM_7.exe
를하면 복사한 값이 뒤에 적용된다
🪐메모
while (getchar() != '\n')
continue;
사용자의 첫번째 입력만 인식하게된다. 정확히는 버퍼에 들어가는 듯?
while ((c = getchar()) != '\n')
putchar(c);
버퍼에 들어간 것들을 모두 출력함과 동시에 버퍼를 비워준다.
🪐숫자와 문자를 섞어서 입력받기
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#include <float.h>
void display(char cr, int lines, int width);
int main()
{
char c;
int rows, cols;
//while (1)
//{
// scanf("%c %d %d", &c, &rows, &cols);
// while (getchar() != '\n') continue;
// display(c, rows, cols);
// if (c == '\n')
// break;
//}
printf("Input one character and two integers:\n");
while ((c = getchar()) != '\n')
{
scanf("%d %d", &rows, &cols);
while (getchar() != '\n') continue;
display(c, rows, cols);
printf("Input another character and two integers:\n");
printf("Press Enter to quit.\n");
}
return 0;
}
void display(char cr, int lines, int width)
{
for (int i = 0; i < lines; i++)
{
for (int j = 0; j < width; j++)
{
printf("%c", cr);
}
printf("\n");
}
}
🪐입력 확인하기
#include <stdio.h>
int main()
{
printf("Please input an integer and press enter.\n");
long input;
char c;
while (scanf("%ld", &input) != 1)
{
printf("Your input - ");
while ((c = getchar()) != '\n')
putchar(c);
printf(" - is not an integer. Please try again.\n");
}
printf("Your input %ld is an integer. Thank you.\n", input);
return 0;
}
위의 예시에서 1에서 100사이 숫자를 입력받을 때까지 반복하도록 만들기
#include <stdio.h>
long get_long(void);
int main()
{
long number;
while (1)
{
printf("Please input an integer between 1 and 100.\n");
number = get_long();
if (number > 1 && number < 100)
{
printf("OK. Thank you.\n");
break;
}
else
printf("Wrong input. Please try again.\n");
}
printf("Your input %d is between 1 and 100. Thank you.\n", number);
return 0;
}
long get_long(void)
{
printf("Please input an integer and press enter.\n");
long input;
char c;
while (scanf("%ld", &input) != 1)
{
printf("Your input - ");
while ((c = getchar()) != '\n')
putchar(c);
printf(" - is not an integer. Please try again.\n");
}
printf("Your input %ld is an integer. Thank you.\n", input);
return input;
}
🪐텍스트 파일 읽기
#include <stdio.h>
#include <stdlib.h> // exit()
int main()
{
int c;
FILE* file = NULL;
char file_name[] = "my_file.txt"; // TODO : use scanf(...)
file = fopen(file_name, "r"); // read or write
if (file == NULL)
{
printf("Failed to open file.\n");
exit(1);
}
while ((c = getc(file)) != EOF)
{
putchar(c);
}
fclose(file);
}