안녕하세요. 구조체 코딩 공부하다가 오류가 계속 발생해서 무엇이 문제인지 모르겠어서 질문드립니다 ..ㅠ scanf_s("%s" , p_friend->name, 메모리 크기)를 해야 되는거 같은데.. (unsigned int)sizeof(p_friend->name)를 추가하여 실행해봐도 실행이 안됩니다 ㅠㅠ 어떤 코드를 작성해야하는 것이 맞을까요..? 구글링해도 1시간째 고민을 해봐도 답이 없어 질문드립니다 !
#include <stdio.h> int main() { int ch; while (1) { ch = getchar(); if ('A' <= ch && ch <= 'Z') { ch = ch + 32; putchar(ch); } else if ('a' <= ch && ch < 'z') { ch = ch - 32; putchar(ch); } else printf("범위를 벗어난 입력입니다."); } return 0; } 이렇게 함수를 구성해보았습니다. 입력받은 문자를 ch에 저장하고, 저장된 문자의 아스키코드가 알파벳 대문자의 범위(65~90)에 속한다면 아스키코드값에 +32를 해주어 소문자로 변환을 하고 반대로 저장된 문자의 아스키코드가 알파벳 소문자의 범위(97~122)에 속한다면 아스키코드값에 -32를 해주어 대문자로 변경을 하는 방식입니다. 그리고 만약, 알파벳 대문자의 범위나 소문자의 범위에도 속하지 않는 기타 문자가 저장된다면 오류메세지를 출력하게끔 구성을 하였습니다. 실제로 컴파일을 해보면 대문자는 소문자로 소문자는 대문자로 정상적으로 변환이 되지만 마지막 else에 있는 printf 함수가 ch에 저장된 값에 상관 없이 아래 사진과 같이 지속적으로 함께 실행이 됩니다. 어느 부분에서 문제가 발생한 걸까요ㅠ.ㅠ
int main() { int num1 = 10; int num2 = 15; int temp =0; int *ptr1 =&num1; int *ptr2=&num2; temp = ptr1; ptr1= ptr2; ptr2 = temp; printf(" *ptr1 : %d , *ptr2 : %d,", *ptr1, *ptr2); } ptr1이 가리키는 변수와 ptr2가 가리키는 변수를 서로 바꿔 ptr2는 num1을 가리키고, ptr1은 num2를 가리키게 하는 함수를 만들어보았습니다. 물론 ptr1 = &num2; ptr2 = &num1; 이렇게 하는 간단한 방식도 있다는 걸 알지만, 어쩌다가 저 부분에 궁금증이 생겼는데, 위와같이 temp를 그냥 int temp = 0; 으로 선언하면 컴파일이 제대로 이루어지지 않지만, int *temp; 와 같이 포인터 변수로 선언하면, 문제 없이 작동하는 걸 확인하였습니다. 저는 포인터 변수를 선언하면, *ptr이라는 변수가 ptr에는 가리키는 변수의 주소가 상수로 저장이 되고, *ptr은 ptr이라는 변수에 상수로 저장된 주소에 접근하는 일종의 연산이라고 생각하였기에, ptr에 저장된 상수(주소값)을 int 형으로 선언된 일반 변수(temp)에 저장하고, 그것을 다시 다른 변수(ptr2)에 옮겨도 문제가 없을 것이라고 생각했는데, temp라는 일반 변수에서는 오류가 발생하고, *temp라는 포인터 변수에 저장을 해야만 제대로 작동하는 것을 확인하였는데 왜 *temp로 선언해야만 제대로 작동하는 지 이유가 궁금합니다..!
안녕하세요! 맥 터미널로 공부하고 있는 학생입니다! 다름이 아니라 sizeof 연산자 사용 부분에서 printf("%u", sizeof(unsigned int)); 를 출력하면 format specifies type 'unsigned int' but the argument has type 'unsigned long'라는 오류 메시지가 뜹니다! 바쁘시겠지만 잘부탁드리겠습니다!
블록체인 분야 기술을 배우고싶은 분들 or 블록체인 분야 취업을 원하시는 분들 주목! 서울시에서 뉴딜일자리사업 일환으로 IT 블록체인과정으로 3개월 인턴십 (급여 월 260) 보내주는 프로그램 진행중인데 신청해보세요! https://blog.naver.com/kjc_sh/222745988610 자세한 내용은참고해주세요 오픈카카오톡 문의 [ https://open.kakao.com/o/stkiOIhe ]
int main ( void ) { int age ; double height ; char grade ; printf ( "Input your grade : \n " ); scanf ( " %c " , & grade ); printf ( "Your grade is %c \n " , grade ); printf ( "Input age and height \n " ); scanf ( " %d%lf " , & age , & height ); printf ( "age is %d height is %.1lf cm \n " , age , height ); } 이렇게 코딩을 하면 출력이 Input your grade : A Your grade is A Input age and height 20 180 age is 20 height is 180.0cm 이렇게 나오는데 int main ( void ) { int age ; double height ; char grade ; printf ( "Input age and height \n " ); scanf ( " %d%lf " , & age , & height ); printf ( "age is %d height is %.1lf cm \n " , age , height ); printf ( "Input your grade : \n " ); scanf ( " %c " , & grade ); printf ( "Your grade is %c \n " , grade ); } 이렇게 하면 출력값이 Input age and height 20 180 age is 20 height is 180.0cm Input your grade : Your grade is 이렇게 나옵니다. 순서에 따라 왜 이런가요?
1. 이해한 것 강의에서 설명한대로 scanf는 lf로 받고 printf 시에만 0.2f 를 하게되면, 진짜 둘째짜리까지만 받은게 아니라 원래 소수까지 받고 나서 곱한 뒤에 출력할 때 소숫점 셋째자리에서 반올림하는 코드라고 이해했습니다. 2. 궁금한 것 3.1295846 과 7.118592 를 입력해도 3.12와 7.11 만 입력받아서 출력예제와 동일한 값 22.18이 나오게 할 수는 없나요? 있다면 코드를 알고싶어요. 3. 제 생각 저는 scanf("%0.2lf %0.2lf", &a, &b) 를 시도해봤는데 0이 나왔습니다. 문자열 배열 두개를 선언해서 [인덱스] 번호를 활용해 0부터 쭉 받으며 데이터가 숫자인지 소수점인지 비교하다가 소수점 발견시 그 요소 이후 두 요소만 더 저장하는 방법을 생각해보았는데 배보다 배꼽이 큰 것 같습니다.
if (m == 'L') for (o = 1; o < i; o++) printf(" "); for (j = 1; j <= s; j++) printf("*"); else if(m == 'R') for (k = 1; k <= n-i; k++) { printf(" "); } for (p = 1; p <= s; p++) { printf("*"); } printf("\n") 저기서 왜 for 문을 두개 이상쓰고 else if를 사용하면 안되는걸까요..ㅜㅜ
예를 들어 1) int i; 2) int i = 0; 이 두개가 다르더라구요... 근데 만약에 저 코드 뒤에 scanf("%d", &i); 이런식으로 i에 값을 입력해줄 예정일지라도 꼭 2번처럼 0을 넣어줘야 하나요?? 아래 예시 코드에 answer = 0을 안해주면 실행자체가 안되네요... answer가 초기화되지 않은 메모리를 쓴다고 에러가 나오고요... 비록 쓰레기값이지만 i를 선언해줬고, 그 쓰레기값을 대체하는 입력값이 뒤에 있는데도 왜 실행이 안되는거죠?? const int password = 4545; int answer; while (answer != password) { printf("enter secret code : "); scanf("%d", &answer); } printf("good!");
#include<stdio.h> int main(void) { int i,n, a,max=0; scanf("%d\n", &n); for (i = 1; i<=n; i++) { scanf("%d", &a); if (a > max) max = a; } printf("%d", max); return 0; } 여기서 반복문안에 scanf가 들어가있으면 계속해서 무언가를 입력해야 되는거 아닌가요?? 최대값을 구하는 문제인데 왜 저렇게 구하는지 모르겠어요..ㅜ