คือผมเขียนโค้ดใน dev-c++ แล้วมีการที่ต้องเก็บ name ของแล้วมีวรรคเลยใช้ gets (โค้ดในสปอยครับ)
แต่ใส่ครั้งเดียวแล้วไม่มีให้กรอก name (เหมือนข้ามไปเลย) แต่พออีกบรรทัดใส่ gets ตัวเดียวกับ (ก็อบวางเลย) กลับได้ปกติ
เลยงงว่า ทำไมต้องใส่ gets ถึง 2 ครั้งหรอครับ
ปล.โค้ดไม่ได้จัดนะครับ T-T
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct data {
char name[20] ;
double money ;
int years ;
};//end struct
//function comma
int comma( struct data input[] , double c ) {
char num[20] ;
sprintf( num , "%.3f" , c ); //float to string
int size = strlen(num) ;
int count = 0 ,dot = 0 , x = 0 ;
//loop size dot
for( x = 0 ; x < size ; x++ ) {
if( num[x] == '.' )
dot = x ; //end if
}//end for
//printf num
for( x = 0 ; x < dot ; x++ ) {
putchar(num[x]); //end for
//print comma
if( (dot - x) % 3 == 1 && dot-1 != x )
putchar(','); //end if
}//end for
//x.xx5 - x.xx9 = x.x(x+1)
if( num[dot+3] >= 53 )
num[dot+2]++ ; //end if
//print dot
for( x = 0 ; x <= 2 ; x++ )
putchar(num[dot+x]); //end for
printf( " Bath" );
return 0;
}//end function
//function sum
int sum( struct data input[] , int c ) {
float answer ;
for( int x = 0 ; x < c ; x++ )
answer+=input[x].money ; //end for
//if sum >= 1m
if( answer > 999999 )
answer-= 900000 ; //end if
comma( input , answer );
return 0 ;
}
//function avg
int avg( struct data input[] , int c ) {
float answer ;
for( int x = 0 ; x < c ; x++ )
answer+=input[x].money ; //end for
//if sum >= 1m
if( answer > 999999 )
answer-= 900000 ; //end if
float avg = answer / c ;
comma( input , avg );
return 0 ;
}
//function swap
int swap( struct data input[] , int c ) {
char cpy_name[20] ;
int cpy_years = 0 ;
double cpy_money = 0 ;
//loop swap array & copy struct
for( int x = 0 ; x < c - 1 ;x++ ) {
for( int y = 0 ; y < c - x - 1 ; y++ ) {
if( input[y].years < input[y+1].years ) {
//- - - - - - - - - - START - - - - - - - - - - - -//
/*copy name*/strcpy( cpy_name ,input[y].name );
/*copy years*/cpy_money = input[y].money ;
/*------ AND ------>*/cpy_years = input[y].years ;
/*copy name*/strcpy( input[y].name ,input[y+1].name );
/*copy years*/input[y].money = input[y+1].money ;
/*------ AND ------>*/input[y].years = input[y+1].years ;
/*copy name*/strcpy( input[y+1].name ,cpy_name );
/*copy years*/input[y+1].money = cpy_money ;
/*------ AND ------>*/input[y+1].years = cpy_years ;
//- - - - - - - - - - END - - - - - - - - - - - -//
}//end if
}//end for
}//end for
return 0;
}//end function
//function input
int input_f( struct data input[] , int c ) {
printf( "----\n" );
printf( "Employee Name :\n" );
gets( input[c].name ); //ตรงนี้แหละครับที่โพสถาม ใส่บรรทัดเดียวไม่มี input name
gets( input[c].name );//แต่พอเพิ่มตรงนี้กลับมี input name ครับ
printf( "Salary (Bath/Month) :\n" );
scanf( "%lf",&input[c].money );
printf( "Duration (Year) :\n" );
scanf( "%d",&input[c].years );
printf( "\n" );
return 0;
}//end function
//function output
int output_f( struct data input[] , int c ) {
printf( "----------------------------------------\n" );
printf( "Average of Salary : " );
avg( input , c );
printf( "\nPayment of every month : " );
sum( input , c );
printf( "\n----------------------------------------\n" );
swap( input , c );
printf( "** Most duration in this business **\n" );
printf( "Name : %s ",input[0].name );
printf( "%d Years)\n",input[0].years );
printf( "Salary : " ); comma( input , input[0].money );
return 0;
}//end function
//function main
int main(int argc, char** argv) {
struct data input[20] ;
int count = 0 ;
char yes_or_no ;
do {
printf( "Do you want to Enter Employee Information? (y/n) :\n" );
scanf( " %c" ,&yes_or_no);
if( yes_or_no == 'y' ){
input_f( input , count );
count++ ;
}//end if
} while( yes_or_no == 'y' && yes_or_no != 'n' ); //end do-while
output_f( input , count );
return 0 ;
}//end function
ทำไมต้องใส่ gets 2 ครั้งซ้อน?
แต่ใส่ครั้งเดียวแล้วไม่มีให้กรอก name (เหมือนข้ามไปเลย) แต่พออีกบรรทัดใส่ gets ตัวเดียวกับ (ก็อบวางเลย) กลับได้ปกติ
เลยงงว่า ทำไมต้องใส่ gets ถึง 2 ครั้งหรอครับ
ปล.โค้ดไม่ได้จัดนะครับ T-T
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้