[해결] c 잘하시는 분 좀 도와주세요 ㅠ

[code:3lsd4crd]#include <stdio.h>

int main(void)
{
int n1, n2;
char ope;

printf(&quot;숫자1&#58; &quot;);
scanf(&quot;%d&quot;, &amp;n1);
printf(&quot;숫자2&#58; &quot;);
scanf(&quot;%d&quot;, &amp;n2);

fflush(stdin);	

printf(&quot;연산자(+,-,* 중 택일)&#58;&quot;);
scanf(&quot;%c&quot;, &amp;ope);		


if(ope=='+')
	printf(&quot;%d%c%d=%d\n&quot;, n1, ope, n2, n1+n2);
else if(ope=='-')
	printf(&quot;%d%c%d=%d\n&quot;, n1, ope, n2, n1-n2);
else if(ope=='*')
	printf(&quot;%d%c%d=%d\n&quot;, n1, ope, n2, n1*n2);

return 0;

}[/code:3lsd4crd]

이걸 gedit에서 쓴 다음
터미널을 열고 실행시켰는데요,

[code:3lsd4crd]chang-yeop@chang-yeop:~$ gcc -o calc calc.c
chang-yeop@chang-yeop:~$ ./calc
숫자1: 2
숫자2: 12
연산자(+,-,* 중 택일):chang-yeop@chang-yeop:~$[/code:3lsd4crd]

이렇게 됩니다.
비쥬얼 스튜디오에서 실행시키면 연산자를 선택하라고 나오고 그걸 입력하면 계산을 하는, 즉 작동이 잘 되거든요?
그런데 우분투에서 하면 연산자 입력하는 곳에서 그냥 끝나버리네요;

왜 이러는 걸까요? 그냥 복사 붙여넣기 한 거라 똑같은 줄 알았는데…

도와주시면 감사하겠습니다^^

fflush는 VC로만 동작합니다(fflush는 출력만 비워줍니다). 리눅스에서는 getchar();로 입력버퍼에 남겨진 값을 소거시킬수 있습니다.
예제:

[code:3kgsrpwg]#include <stdio.h>
void main(){
int n1,n2; char a;
printf("숫자1: ");
scanf("%d", &n1);
printf("숫자2: ");
scanf("%d", &n2);
printf("연산자(+,-,* 중 택일):");
getchar();
scanf("%c", &ope);
printf("%d%c%d=",n1,a,n2);
switch(a){
case ‘+’: n1+=n2; break;
case ‘-’: n1-=n2; break;
case '':n1=n1n2; break;
}
printf("%d\n",n1);
}[/code:3kgsrpwg]
결과:

[code:3kgsrpwg]$ ./ha.bin
숫자1: 5
숫자2: 6
연산자(+,-,* 중 택일):+
5+6=11[/code:3kgsrpwg]

와~~~ 감사합니다!!

하루도 안 돼서 답변을 받네요~~!

숙제인가요?

아뇨 ㅎㅎ

학교에서 실습시간에 visual studio로 저걸 만들었는데 그걸 그냥 버리긴 아깝고 해서 집에 파일 가져와서 우분투에서 똑같이 돌려봤어요~

전공수업은 아니지만 그냥 재미로 해봅니다 ㅋㅋ

생각보다 꽤 중요한 문제를 긁어주셨군요 ㅋㅋ
제 지식도 +1 되었습니다. 감사해요. :)

scanf 에서 입력 받을 때 줄 바꿈 문자(엔터)로 인한 문제가 발생 할 때 쉬운 해결 방법으로
scanf 의 [color=#0000FF:2zsbsoxw]포맷 문자열의 %앞에 빈칸(스페이스)을 추가[/color:2zsbsoxw]하는 방법이 있습니다.
%앞에 빈칸을 추가하면 입력 버퍼의 화이트 스페이스를 먹어?버립니다.

[code:2zsbsoxw]scanf(" %c", &ope);[/code:2zsbsoxw]

[quote="별님":ig8azk48]fflush는 VC로만 동작합니다(fflush는 출력만 비워줍니다). 리눅스에서는 getchar();로 입력버퍼에 남겨진 값을 소거시킬수 있습니다.
예제:

[code:ig8azk48]#include <stdio.h>
void main(){
int n1,n2; char a;
printf("숫자1: ");
scanf("%d", &n1);
printf("숫자2: ");
scanf("%d", &n2);
printf("연산자(+,-,* 중 택일):");
getchar();
scanf("%c", &ope);
printf("%d%c%d=",n1,a,n2);
switch(a){
case ‘+’: n1+=n2; break;
case ‘-’: n1-=n2; break;
case '':n1=n1n2; break;
}
printf("%d\n",n1);
}[/code:ig8azk48]
결과:

[code:ig8azk48]$ ./ha.bin
숫자1: 5
숫자2: 6
연산자(+,-,* 중 택일):+
5+6=11[/code:ig8azk48][/quote:ig8azk48]

지금 보니까 getchar(); 다음 줄에

scanf("%c", &ope); 에서 &ope → &a 로 고쳐야 되네요 ㅋ

사소한 거지만 혹 나중에 볼 사람이 있을 지 모르니 ㅋ