fseek 사용도중 한칸 뒤로 했는데 파일 포인터 거의 처음으로 가

kknd345의 이미지

문제되는 소스코드는 아래와 같은데요
디버그 모드중에서 확인해 보니 전 원래
fseek( rfp, -1, SEEK_CUR );해서 한칸 뒤로간다고 생각하고 했는데 파일 포인터 거의 처음으로 가버립니다.
무엇이 잘 못 된걸까요?
pAssociative->rfp=fopen("strset.inp","r");

void cAssociative::getOneStr( void )
{
	int i=0;

	while( (tmp=fgetc(rfp)) == 32 ){ }           
	if( fseek( rfp, -1, SEEK_CUR ) != 0 )
	{
		//fprintf(wfp,"ERROR FSEEK\n");
		exit(1);
	}//====스페이스 제거문===============//

	tmp=fgetc(rfp);
	while( ((tmp=fgetc(rfp)) != 32) && (tmp != '\n') && (tmp != EOF) ) // 32 is space
	{
		tmp=toupper(tmp); // key 값은 모두 대문자 해야 하므로 사용한다
		tempStr[i] = tmp;
		i++;
		checkPrepare = false;
	}

	if( tmp == '\n' )
		checkPrepare = true;
	
	if( tmp == EOF )
		checkEnd = true;


	tempStr[i]='\0';
}
kknd345의 이미지

텍스트 문서가 이상해서 그랬던 것 같습니다.

엔터 대신에 네모난것이 들어가있길래
네모를 엔터로 고치고 하니 제대로 되네요.

네모 도대체 무엇인지는 모르겠습니다.

여기에 붙여넣기 하니깐 자동으로 엔터 취급되더군요.

1%의 가능성이면 충분하다!
최선을 다하자!

서지훈의 이미지

파일에 들어가 있는 값을 잘 확인 해보세요.
fseek()의 사용법에는 문제가 없는듯 합니다.
만약에 의심스러우면 각 단계에서값을 찍어 보시는것도 좋은 방법일 듯 하네요.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

cinsk의 이미지

어떤 의미있는 문자열을 끊어내는 것 같은데.. 이 목적으로 단순히 ASCII code 32인 ' '을 제거하는 것은 바람직하지 않습니다. 왜냐하면, 두번째 쓰신 것처럼, 원하지 않는 문자가 들어올 수 있기 때문입니다. 따라서 의미있는 문자열을 이루는 문자가 어떤 범위에 있는지 결정하고, 그것만 읽어내는 것이 더욱 좋습니다. 이 목적으로 isprint()와 같은 함수를 쓸 수도 있습니다.

반대로 문자열을 이루지 않는 공백 문자 등을 제거하기 위해서는 isspace()를 쓰는 것이 단순히 ' '을 검색하는 것보다 좋습니다. isspace()를 쓰면 ' ' 뿐만 아니라 '\t', '\v' 등을 걸러낼 수 있습니다.

그리고 여담으로, ' '을 위해 수치 32를 쓰는 것은 별로 좋은 습관이 아닙니다. 차라리 ' '를 직접 쓰는 것이 좋습니다. 꼭, 수치를 써야 겠다면 macro로 정의해 두고 이 매크로를 쓰는 것을 고려하기 바랍니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.