使用fgets()常會遇到一個問題,輸入的字元數目超過Buffer給定的,就會出現下列的狀況。
狀況:當程式為 fgets( cName, 30, stdin ); 時,輸入超過30 個字元,程式就會每次輸出30個字元直到全部資料被輸出。下列為此種現象程式碼及狀況示意圖 :
#include <stdio.h>
#include <string.h>
int main()
{
char cName[30];
FILE *pFile;
pFile = fopen( "write.csv", "a" );
if( pFile == NULL )
{
printf("open failure");
return 1;
}
while(1)
{
printf("please enter your name: \n");
fgets( cName, 30, stdin );
if( 'E' == cName[0] && ('\n' == cName[1] || '\0' == cName[1] ))
{
break;
}
fwrite(cName, 1, strlen( cName ) , pFile);
memset( cName, 0x00, sizeof( cName ) );
}
fclose(pFile);
return 0;
}
這時若多出來的資料,使用者不用需要捨棄,則程式碼改成如下 :
#include <stdio.h>
#include <string.h>
int main()
{
char cName[30];
FILE *pFile;
pFile = fopen( "write.csv", "a" );
if( pFile == NULL )
{
printf("open failure");
return 1;
}
while(1)
{
printf("please enter your name: \n");
fgets( cName, 30, stdin );
if( strchr(cName, '\n') == 0 )
{
while(fgetc(stdin)!='\n');
cName[29] = '\n';
}
if( 'E' == cName[0] && ('\n' == cName[1] || '\0' == cName[1] ))
{
break;
}
fwrite(cName, 1, strlen( cName ) , pFile);
memset( cName, 0x00, sizeof( cName ) );
}
fclose(pFile);
return 0;
}
就會變成超過的,就忽略不要囉。
文章標籤
全站熱搜
留言列表