在 C 中读取和打印字符串
Reading and printing strings in C
我想在 loop.But 中一个接一个地扫描并打印两个字符串 我做不到 it.Only 如果我使用 loop.If 我尝试打印一个字符串没有循环那么两个 "gets()" 工作正常。
#include <stdio.h>
int main()
{
int T,i,j;
char name1[100];
char name2[100];
scanf("%d",&T);
for(i=0; i<T; i++)
{
printf("Case %d: ",i+1);
//scanf("%[^\n]s",name1);
gets(name1);
/*for(j=0; j<strlen(name1); j++)
{
printf("%c",name1[j]);
}*/
puts(name1);
//scanf("%[^\n]s",name2);
gets(name2);
/*for(j=0; j<strlen(name2); j++)
{
printf("%c",name2[j]);
}*/
puts(name2);
}
}
给你。使用 fflush(stdin)
。它将接受两个输入并一个接一个地打印它们。
#include<stdio.h>
int main()
{
int T,i,j;
char name1[100];
char name2[100];
scanf("%d",&T);
for(i=0; i<T; i++)
{
printf("Case %d: ",i+1);
fflush(stdin);
gets(name1);
gets(name2);
puts(name1);
puts(name2);
}
return 0;
}
编辑:正如下面评论中所建议的,如果您不知道要读取的字符数,则不建议使用 gets()。
您不会终止打印。
标准输出被缓冲。
打印仅在“\n”或显式刷新后执行。
尝试绕行:
#include <stdio.h>
int main()
{
int T,i,j;
char name1[100];
char name2[100];
scanf("%d",&T);
for(i=0; i<T; i++)
{
#ifdef BAD_CODE
printf("Case %d: ",i+1);
gets(name1);
puts(name1);
gets(name2);
puts(name2);
putchar("\n");
#else //better code
fgets(name1, sizeof(name1)-1, stdin);
fgets(name2, sizeof(name2)-1, stdin);
printf("Case %d: '%s' '%s'\n",i+1, name1, name2);
#endif
}
}
从用户处获取测试用例后,下一行 gets()
函数将获取 '\n'
你必须忽略的场景。
Here's a tricky solution of this problem. Just use '\n'
after %d
in scanf function. scanf("%d\n",&T);
#include <stdio.h>
int main(void) {
char s1[100],s2[100];
int i,T;
scanf("%d\n",&T);
for(i = 0; i < T; i++){
printf("Case %d: ",i+1);
gets(s1);
puts(s1);
gets(s2);
puts(s2);
}
return 0;
}
我想在 loop.But 中一个接一个地扫描并打印两个字符串 我做不到 it.Only 如果我使用 loop.If 我尝试打印一个字符串没有循环那么两个 "gets()" 工作正常。
#include <stdio.h>
int main()
{
int T,i,j;
char name1[100];
char name2[100];
scanf("%d",&T);
for(i=0; i<T; i++)
{
printf("Case %d: ",i+1);
//scanf("%[^\n]s",name1);
gets(name1);
/*for(j=0; j<strlen(name1); j++)
{
printf("%c",name1[j]);
}*/
puts(name1);
//scanf("%[^\n]s",name2);
gets(name2);
/*for(j=0; j<strlen(name2); j++)
{
printf("%c",name2[j]);
}*/
puts(name2);
}
}
给你。使用 fflush(stdin)
。它将接受两个输入并一个接一个地打印它们。
#include<stdio.h>
int main()
{
int T,i,j;
char name1[100];
char name2[100];
scanf("%d",&T);
for(i=0; i<T; i++)
{
printf("Case %d: ",i+1);
fflush(stdin);
gets(name1);
gets(name2);
puts(name1);
puts(name2);
}
return 0;
}
编辑:正如下面评论中所建议的,如果您不知道要读取的字符数,则不建议使用 gets()。
您不会终止打印。 标准输出被缓冲。 打印仅在“\n”或显式刷新后执行。 尝试绕行:
#include <stdio.h>
int main()
{
int T,i,j;
char name1[100];
char name2[100];
scanf("%d",&T);
for(i=0; i<T; i++)
{
#ifdef BAD_CODE
printf("Case %d: ",i+1);
gets(name1);
puts(name1);
gets(name2);
puts(name2);
putchar("\n");
#else //better code
fgets(name1, sizeof(name1)-1, stdin);
fgets(name2, sizeof(name2)-1, stdin);
printf("Case %d: '%s' '%s'\n",i+1, name1, name2);
#endif
}
}
从用户处获取测试用例后,下一行 gets()
函数将获取 '\n'
你必须忽略的场景。
Here's a tricky solution of this problem. Just use
'\n'
after%d
in scanf function.scanf("%d\n",&T);
#include <stdio.h>
int main(void) {
char s1[100],s2[100];
int i,T;
scanf("%d\n",&T);
for(i = 0; i < T; i++){
printf("Case %d: ",i+1);
gets(s1);
puts(s1);
gets(s2);
puts(s2);
}
return 0;
}