https://www.codechef.com/problems/LADDU not able to scan string in the array "work" on line 12 of the code.
#include<stdio.h>
int main()
{
long long int i,j,T,actv,points,a,b,c;
char origin[100],work[100];
scanf("%lld",&T);
while(T--)
{
points=0;
scanf("%lld %s",&actv,origin);
for(i=0;i<actv;i++)
{
printf("hie\n");
scanf("%[^\n]s",work);
printf("hello\n");
}
}
return 0;
}
Instead of scanf()
use fgets()
to scan a string with spaces.
fgets(work,sizeof(work),stdin);
Note: fgets()
comes with a newline character. So
size_t n = strlen(work);
if(n>0 && work[n-1] == '\n')
{
work[n-1] = '\0';
}
Use fgets instead of scanf.
#define BUFFERSIZE sizeof(work)
if (fgets(work, BUFFERSIZE , stdin) != NULL)
{
// your stuff
}
To get your string with spaces.
If your C-stirng is shorter than BUFFERSIZE
last char before null terminator will be ' \\n'
scanf("%lld %s",&actv,origin);
After the line is executed, newline remains unconsumed.
scanf("%[^\\n]s",work);
Since %[^\\n]
doesn't accept the newline, it doesn't perform read.
(Also, s
is not required. Eg %[^\\n]s
--> %[^\\n]
)
So, Change such in the following.
scanf("%lld %s%*c",&actv,origin);
// %*c
for skip one character(newline) or while(getchar()!='\\n');
//skip upto newline
...
scanf("%99[^\\n]%*c",work);
for fast reading/writing of numbers use:
#include <stdio.h>
void fastRead( size_t *a );
void fastWrite( size_t a );
inline void fastRead(size_t *a)
{
int c=0;
// note: 32 is space character
// consume leading trash
while (c<33) c=getchar_unlocked();
// initialize result value
*a=0;
// punctuation parens, etc are show stoppers
while (c>47 && c <58)
{ // then in range 0...9
*a = (*a)*10 + (size_t)(c-48);
c=getchar_unlocked();
}
//printf( "%s, value: %lu\n", __func__, *a );
} // end function: fastRead
inline void fastWrite(size_t a)
{
char snum[20];
//printf( "%s, %lu\n", __func__, a );
int i=0;
// decompose 'a' into char array
do
{
// 48 is numeric character 0
snum[i++] = (char)((a%10)+(size_t)48);
a=a/10;
}while(a>0);
i=i-1; // correction for overincrement from prior 'while' loop
while(i>=0)
{
putchar_unlocked(snum[i--]);
}
putchar_unlocked('\n');
} // end function: fastWrite
Along with the above two functions, here is a typical program using those functions:
#define MAX_VALUE (1000000)
int array[ MAX_VALUE +1 ];
int main( void )
{
// get number of test cases
size_t numTestCases;
fastRead( &numTestCase );
//scanf( "%lu", &numTestCases );
//printf( "%s, Number of Test Cases: %lu\n", __func__, numTestCases);
// accumulate test cases, sorted
for( size_t i=0; i<numTestCases; i++ )
{
size_t value;
fastRead( &value );
//scanf( "%lu", &value );
array[value]++;
}
// output the unique values, assending
for( size_t i=0; i<MAX_VALUE; i++ )
{
if( array[i] )
{
fastWrite( i );
//printf( "%s. %lu\n", __func__, i );
}
}
return 0;
}
The fastRead and fastWrite functions (rather than printf and scanf) will greatly speed up your code.
Now you only need to implement the problem set.
Note: to read in a string:
size_t i = 0;
while( i < sizeof( inputArray ) && (ch = getchar_unlocked()) && ' ' != ch )
{
inputArray[i] = ch;
i++;
}
inputArray[i] = '\0';
You could use some other string delimiter, like a '\\n', rather than ' '
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.