[英]Problem reading two strings with getchar() and then printing those strings in C
[英]Reading and printing strings in C
我想在一個循環中一個接一個地掃描並打印兩個字符串。但是我做不到。如果使用循環,只有一個字符串被掃描並打印。如果我嘗試不使用循環進行打印,則兩個“ 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()。
從用戶獲得測試用例后,下一行gets()
函數將使用'\\n'
您必須忽略該場景。
這是此問題的棘手解決方案。 在scanf函數的
%d
之后僅使用'\\n'
。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;
}
您不終止打印。 stdout已緩沖。 僅在“ \\ 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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.