https://www.codechef.com/problems/LADDU 无法扫描数组中的字符串" work"在代码的第12行。
#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;
}
答案 0 :(得分:2)
而不是"zone.js"
使用scanf()
来扫描带空格的字符串。
fgets()
注意:
fgets(work,sizeof(work),stdin);
附带换行符。所以
fgets()
答案 1 :(得分:1)
使用fgets代替scanf。
#define BUFFERSIZE sizeof(work)
if (fgets(work, BUFFERSIZE , stdin) != NULL)
{
// your stuff
}
获取带空格的字符串。
如果你的C-stirng比BUFFERSIZE
最后一个字符短,那么空终结符将为'\n'
答案 2 :(得分:0)
@RequestMapping(value = "/VMS-49001/playlist/{listName:.+}")
public ResponseEntity<byte[]> testphoto() throws IOException {
InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/vnd.apple.mpegurl"));
headers.setContentDispositionFormData(fileName, fileName);
return new ResponseEntity<byte[]>(IOUtils.toByteArray(in), headers, HttpStatus.CREATED);
}
执行该行后,换行仍然无法使用。
scanf("%lld %s",&actv,origin);
由于scanf("%[^\n]s",work);
不接受换行符,因此不会执行读取。
(另外,%[^\n]
不是必需的。例如s
- &gt; %[^\n]s
)
所以,改变如下。
%[^\n]
// scanf("%lld %s%*c",&actv,origin);
用于跳过一个字符(换行符)或%*c
//跳到换行符
...
while(getchar()!='\n');
答案 3 :(得分:0)
快速阅读/写入数字使用:
#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
除上述两个函数外,这是一个使用这些函数的典型程序:
#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;
}
fastRead和fastWrite函数(而不是printf和scanf)将大大加快代码的速度。
现在您只需要实现问题集。
注意:读一个字符串:
size_t i = 0;
while( i < sizeof( inputArray ) && (ch = getchar_unlocked()) && ' ' != ch )
{
inputArray[i] = ch;
i++;
}
inputArray[i] = '\0';
您可以使用其他字符串分隔符,例如'\ n',而不是''