2017-03-04 1 views
1

나는이 코드를 실행하려고하지만 최종 결과는 그리 설득력이 없습니다. 예상 출력 다음C 언어로 입력하는 중에 예기치 않은 동작이 발생했습니다.

0 50 

됩니다 :

50 50 

주 출력 아래

Enter No. of Testcases & Faults 
50 50 code 

된다 아래

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main() 
{ 
    unsigned char nT,nF;  
    char extension[5]; 

    puts("Enter No. of Testcases & Faults"); 
    scanf("%d %d %s", &nT, &nF, extension); 
    printf("%d %d\n",nT,nF); 
    getch(); 
} 

샘플 입력 : 여기 코드는 : 나는 unsigned char와 ca를 사용하도록 제한되어있다. unsigned int를 사용할 수 없습니다.

DevCpp 4.9.9.2를 사용 중입니다. 누구나 해결책이나 이유가있는 경우 도움을주십시오.

+5

정의되지 않은 동작을 출력을 볼 수 있습니다. – EOF

답변

3

scanf 절을 살펴보십시오. unsigned char 개의 변수를 두 개 (포인터) 전달하고 있지만 형식 지정자 (%d 지정자)에 두 개의 ints을 읽었다 고 선언하십시오. unsigned char을 읽으려면 %hhu을 전달하십시오.

&extensionscanf으로 전달할 때 앰퍼샌드를 사용할 필요가 없습니다. 배열의 이름은 첫 번째 요소에 대한 포인터로 변환되므로 extension 만 전달하면 충분합니다.

더 이상 개발되지 않은 매우 오래된 IDE (Dev-C++)도 사용하고 있습니다. 아마 기본 컴파일러도 날짜가 매겨 졌을 것입니다. 더 새로운 도구를 사용하는 것이 좋습니다, Code::Blocks은 적극적으로 아주 초보자 친화적이고 Dev-C++와 어느 정도 유사합니다.

그러나 Windows 플랫폼에서이 question에서 설명한대로 MSVCRT 라이브러리는 %hhu 형식 지정자를 지원하지 않습니다. MingGW 컴파일러는이 구현을 사용하므로 Windows에서도 %hhu을 지원하지 않습니다. Cygwin은 Windows에서 Linux 환경을 시뮬레이트하는 프로젝트이며, 특히 %hhu을 지원하는 자체 라이브러리 C 라이브러리와 함께 배포됩니다. sidenote로, Code :: Blocks를 Cygwin에서 작동하도록 설정할 수 있습니다 (here). 나는 Dev-C++로 같은 것을 얻을 수 있는지는 모른다.

+0

% hhu를 사용하면 이전과 같은 결과가 나타납니다. 문제는 제가 생각하기에 컴파일러에 있습니다. 너 무슨 소리 야? @lukeg –

+0

@Ankit 컴파일러 버전이 % hhu 형식 지정자를 지원하는지 확인하십시오. 나는 새로운 것을 시도하거나 C99 모드로 전환하려고 노력할 것을 권합니다. 그러나 Windows를 사용하면서 다른 호환성 문제가 발생할 수 있습니다. 자세한 내용은이 질문을 참조하십시오. http://stackoverflow.com/questions/15825254/why-is-scanfhhu-char-overwriting-other-variables-when-they -are-local – lukeg

+0

나는 그 문제를 보았고 같은 문제에 직면했다. nT와 nF를 전역 변수로 선언하면 예상대로 출력되지만 로컬 변수로 선언하면 문제가 발생합니다.이것은 내가 생각하는 창 특정 문제입니다. 어쨌든 정보 주셔서 감사합니다 :) @lukeg –

0
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main() 
{ 
    unsigned int nT,nF;  
    char extension[5]; 

    puts("Enter No. of Testcases & Faults"); 
    scanf("%d %d %s", &nT, &nF, extension); 
    printf("%d %d\n",nT,nF); 
    getch(); 
} 
+0

@dipika에 답 해주셔서 고맙지 만 서명되지 않은 char을 사용하고 int를 사용할 수 없다. –

+0

'% u '는'% d'가 아닌'unsigned int '형식 지정자이다. – lukeg

0
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main() 
{ 
    unsigned char nT,nF;  
    char extension[5]; 

    puts("Enter No. of Testcases & Faults"); 
    scanf("%hhu %hhu %s", &nT, &nF, extension); 
    printf("%hhu %hhu\n",nT,nF); 
    // getch(); 
} 

당신은`) (scanf와`에 잘못된 유형에 잘못된 형식의 포인터를 전달 아래 이미지를

enter image description here

+0

위의 입력을 위해이 코드가 컴퓨터에서 작동합니까? –

+0

Windows를 사용하고 있기 때문에 Windows 플랫폼에서이 코드를 테스트하면 좋을 것입니다. –

+0

플랫폼과 관련된 문제가 없습니다. 거기에서 컴파일하고 실행할 수 있습니다. 답변을 위해 upvote하십시오. –

관련 문제