scanf 함수는 공백이 포함된 형태의 문자열을 입력 받는데 제한이 있다. 그러나 puts, fputs는 제한이 없다

 

문자열 출력 함수 : puts, fputs

puts : 출력의 대상이 stdout으로 고정, 이 함수가 호출되면 문자열 출력 후 자동으로 개행(\n)이 이루어짐

fputs : 두 번째 인자를 통해서 출력의 대상을 결정 가능, 문자열 출력 후 자동으로 개행이 이루어지지 않음

1
2
3
4
#include <stdio.h>
 
int puts(const char * s);
int fputs(const char * s, FILE * stream);
cs

→ 성공 시 음수가 아닌 값을, 실패 시 EOF 반환

 

문자열 입력 함수 : gets, fgets

gets : stdin으로 부터 문자열을 입력 받음

fgets : 문자열을 입력 받을 곳을 설정 가능하며, size도 설정할 수 있다, 이 함수는 \n을 만날 때까지 문자열을 읽어 들이는데, \n을 제외시키거나 버리지 않고 문자열의 일부로 받아들인다. (우리가 입력 한 엔터 키의 정보까지도 문자열의 일부로 저장됨)

1
2
3
4
#include <stdio.h>
 
char * gets(char * s);
char * fgets(char * s, int n, FILE * stream);
cs

ex)

1
2
3
4
5
6
7
#include <stdio.h>
 
int main ()
{
   char str[7];
   gets(str);
}
cs

 

1
2
3
4
5
6
7
#include <stdio.h>
 
int main ()
{
   char str[7];
   fgets(str, sizeof(str), stdin);
}
cs

↑ 여기서 str배열 사이즈인 7값이 설정 돼 있지만 "123456789"의 문자열을 받게 될 경우 str배열에는 "123456"만 값이 저장된다. 이유는 문자열의 끝에 자동으로 널 문자가 추가되므로.

 

 

 

 

 

Posted by 知彼知己百戰不殆
,

문자 출력 함수 : putchar, fputc

putchar : 인자로 전달된 문자 정보를 stdout으로 표현되는 표준 출력 스트림으로 전송하는 함수

fputc : stdout(표준출력-모니터) 뿐만이 아니라 파일을 대상으로도 데이터를 전송 할 수 있다.

          (FILE * stream에 stdout을 전달하면 putchar와 동일한 함수)

 

1
2
3
4
#include <stdio.h>
 
int putchar(int c);
int fputc(int c, FILE * stream);

cs

→ 함수 호출 시 쓰여진 문자 정보 반환, 실패시 EOF 반환(End Of File)

EOF : 파일의 끝을 표현하기 위해서 정의해 놓은 상수

fgetc함수와 getchar함수는 언제 EOF 반환?

- 함수 호출의 실패

- 윈도우 : Ctrl + Z , 리눅스 : Ctrl + D  입력되는 경우

 

문자 입력 함수 : getchar, fgetc

getchar :  stdin(표준입력-키보드)으로 표현되는 표준 입력 스트림으로부터 하나의 문자를 입력 받아서 반환하는 함수, 하나의 문자를 입력 받음

문자가 아닌 공백을 포함하는 문장을 입력해도 되는데, 문장이 입력되면 문장을 구성하는 문자의 수만큼 getchar 함수가 호출되면서 모든 문자를 읽어 들인다.

fgetc : 하나의 문자 입력 받음, getchar와 다른 점은 문자를 입력 받을 스트림을 지정할 수 있다.

1
2
3
4
#include <stdio.h>
 
int getchar(void);
int fgetc(FILE * stream);
cs

 

 

Posted by 知彼知己百戰不殆
,

명령어

언어/Assembly 2015. 12. 16. 20:12

clc 명령어 : Carry 플래그를 0으로 해제

stc 명령어 : Carry 플래그 1로 셋팅

Posted by 知彼知己百戰不殆
,

0dh,0ah

언어/Assembly 2015. 12. 16. 16:41

0dh,0ah

.data

menu  BYTE "1. x AND y",0dh,0ah
   BYTE "2. x OR y",0dh,0ah
   BYTE "3. NOT x",0dh,0ah
   BYTE "4. x XOR y",0dh,0ah
   BYTE "5. Exit Program",0

문장 띄어쓰기 할 때 사용

Posted by 知彼知己百戰不殆
,

size_t형과 unsigned int

언어/C 2015. 12. 11. 11:54

size_t : unsigned int, 문자열이나 메모리의 사이즈를 나타낼 때 사용

unsigned int를 typedef unsigned int size_t;  (size_t 라는 이름으로 정의해 놓은 것)

size_t는 32비트 운영체제에서 '부호없는 32비트 정수', 64비트 운영체제에서는 '부호없는 64비트 정수'

unsigned int 또는 int는 64비트 OS라고 해서 항상 64비트 정수는 아니다. 여전히 32비트 일 수도 있음.

이것이 size_t형과 unsigned int형의 차이

Posted by 知彼知己百戰不殆
,

문제:

32비트 정수에 대한 간단한 부울 계산기로 동작하는 프로그램을 작성하시오. 이 프로그램은 사용자에게 다음 리스트에서 선택하도록 요청하는 메뉴를 표시해야 한다.

1. x AND y

2. x OR y

3. NOT x

4. x XOR y

5. Exit program

사용자가 선택하면 수행할 연산의 이름을 표시하는 프로시저를 호출한다. (우리는 다음 연습문제에서 이 연산들을 구현할 것이다.)

 

INCLUDE Irvine32.inc

.data
menu  BYTE "1. x AND y",0dh,0ah
   BYTE "2. x OR y",0dh,0ah
   BYTE "3. NOT x",0dh,0ah
   BYTE "4. x XOR y",0dh,0ah
   BYTE "5. Exit Program",0

menu1 BYTE "x AND y",0
menu2 BYTE "x OR y",0
menu3 BYTE "NOT x",0
menu4 BYTE "x XOR y",0
menu5 BYTE "Exit Program",0
str1 BYTE "Select the menu: "
int1 DWORD ?
int2 DWORD ?

.code
main PROC
START:
 mov  edx,OFFSET menu
 call WriteString
 call Crlf
 call Crlf
 mov  edx, 0
 mov  edx,OFFSET str1
 call WriteString
 call ReadInt

 cmp  eax, 1
 je  STATE1
 cmp  eax, 2
 je  STATE2
 cmp  eax, 3
 je  STATE3
 cmp  eax, 4
 je  STATE4
 cmp  eax, 5
 je  QUIT

STATE1:
 call AND_op
 jmp START
STATE2:
 call OR_op
 jmp START
STATE3:
 call NOT_op
 jmp START
STATE4:
 call XOR_op
 jmp START
QUIT:
 mov  edx,OFFSET menu5
 call WriteString
 call Crlf
 exit
main ENDP

AND_op PROC
 mov  edx,OFFSET menu1
 call WriteString
 call Crlf
 ret
AND_op ENDP

OR_op PROC
 mov  edx,OFFSET menu2
 call WriteString
 call Crlf
 ret
OR_op ENDP

NOT_op PROC
 mov  edx,OFFSET menu3
 call WriteString
 call Crlf
 ret
NOT_op ENDP

XOR_op PROC
 mov  edx,OFFSET menu4
 call WriteString
 call Crlf
 ret
XOR_op ENDP

END main

 

 

 

'언어 > Assembly' 카테고리의 다른 글

명령어  (0) 2015.12.16
0dh,0ah  (0) 2015.12.16
어셈블리 과제: 점수 입력 받아서 점수에 해당하는 등급 출력하는 코드  (0) 2015.12.05
Posted by 知彼知己百戰不殆
,

INCLUDE Irvine32.inc

.data
str1 BYTE "Input the exam grade: ",0
str2 BYTE "Grade: ",0
str3 BYTE 'A','B','C','D','F'

.code
main PROC
Grade:
 mov  edx, OFFSET str1
 call WriteString
 call ReadInt
 
 mov  ebx,41h
 cmp  eax,90
 jge  L1
 inc  ebx

 cmp  eax,80
 jge  L1
 inc  ebx

 cmp  eax,70
 jge  L1
 inc  ebx

 cmp  eax,60
 jge  L1
 
 mov  ebx,46h
 jmp  L1

L1:
 mov  edx,OFFSET str2
 call WriteString
 mov  eax,ebx
 call WriteChar
 call Crlf
 jmp  Grade

main ENDP
END main

 

90~100 : A등급

80~89 : B등급

70~79 : C등급

60~69 : D등급

0~59 : F등급

'언어 > Assembly' 카테고리의 다른 글

명령어  (0) 2015.12.16
0dh,0ah  (0) 2015.12.16
어셈블리 과제: 32비트 정수 부울 계산기  (0) 2015.12.05
Posted by 知彼知己百戰不殆
,