1

최근 C 프로그래밍 언어 (제 2 판)를 선택하여 책의 예를 통해 작업 해 왔습니다. 배열은 나에게 문제를주고있다. 특히, 그것은 타입 캐스팅과 관련이있는 것으로 보인다. 1.6 절의 예제는 입력을 읽고 특정 카테고리에 속하는 문자의 수를 계산합니다. 이 코드 세그먼트는 소스 코드를 실행 파일을 통해 파이프 할 때 segfault를 생성하는 것으로 보이며 숫자 문자도 제대로 포착하지 못합니다. 표준 입력과^D를 EOF에 사용하면 숫자를 포착하지 않고 segfault가 없더라도 다른 문자로 계산합니다.교과서에서 바로 나온 내용입니다.

while ((c=getchar())!=EOF) 
    if(c>='0'&&c>='9') 
    ++ndigit[c-'0']; 

나는 그것을 다른 섹션을 교환하여 오류를 일으키는 프로그램의 다른 부분의 가능성을 제거했지만, 도움이된다면 나는 어쨌든 나머지를 게시 할 수 있습니다. 내 이해를 위해,이 루프는 입력의 개별 문자를 통해 진행되어야합니다. 값이 0에서 9 사이 인 경우 문자를 숫자 (ndigit 배열 위치 0-9에 해당)로 변환하고 해당 배열 위치를 1 씩 증가시킵니다.

K & R 2e가 오래된 것입니까? 문자 인코딩 (ASCII 대 유니 코드)은 문자 수를 정수로 변환 할 때 문제가됩니까? 어떤 조언을 주시면 감사하겠습니다. (그것도 문제 경우)하지만 내 컴파일러는 GCC입니다

내가 내 인코딩을 확인하는 방법을 잘 모르겠어요 (우분투/리나 4.7.3-1ubuntu1) 4.7.3

+0

['INT isdigit에 (INT C)'(HTTP : //www.cplusplus.com/reference/cctype/isdigit/) 문자가 십진수인지 확인하십시오. –

+0

숫자가 맞는지 테스트하는 것이 좋습니다. @ ifah가 대답하는 것처럼'if (c> = '0'&& c <= '9') ' – nowLearningC

+0

음'if (c> ='0 '&& c> ='9 ')'이 잘못되었습니다. 나를 위해 매크로 기능을 선호합니다. –

답변

5
if(c>='0'&&c>='9') 

그럼 당신은 의미 :

if(c>='0'&&c<='9') 

또한 c가 올바르게 입력 int하지 char로 선언되어 있는지 확인하시기 바랍니다.

+0

OP의 경우 : learn [C가 int char가 아니어야하는 이유] (http://faq.cprogramming.com/cgi- bin/smartfaq.cgi? id = 1043284351 & answer = 1048865140) –

+0

와우, 오타의 공격. 내가 그것을보기 전에 당신의 대답을 잠깐 쳐다보아야 만했습니다. 예, 코드에는 char 변수가 없지만> = 필요한 수정입니다. 결정된! – nowLearningC

+0

@ user2546556 [이 답변을 수락하겠습니다.] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work?answertab=votes#tab-top) 당신은 새로운 사용자입니다. –

0

배열 루프의 오타 (typo)로 인해이 연습 문제에 봉착했습니다.

for (i = 0; 1 < 10; ++i) 
    ndigit[i] = 0; 

그것은 했어야 ..

for (i = 0; i < 10; ++i) 
     ndigit[i] = 0; 

참고 내가 및 전치된다 1

당신이 사용할 수