1、输入输出一个字符串
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str1[50];
gets(str1);
puts(str1);
return 0;
}
2、输入输出一个字符串数组
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str2[10][50];
printf("请输入3个字符串:\n");
for(int i=0;i<3;i++){
gets(str2[i]);
}
printf("3个字符串为:\n");
for(int i=0;i<3;i++){
puts(str2[i]);
}
return 0;
}
3、gets注意点:
gets会识别换行符 \n 为一个字符串的输入结束标志
gets获取一个字符串之后识别字符串后面的换行符 \n,并将其丢弃,不会留在缓冲区
因为scanf在读入一个数据后,会把末尾的回车,换行符 \n 留在缓冲区
所以,如果后面紧接着gets读入字符串会识别 \n 为一个完整字符串
错误示例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
char str2[10][50];
printf("请输入一个整数:\n");
scanf("%d",&n); /*这里用了scanf进行输入,缓冲区会有\n遗留*/
printf("请输入3个字符串:\n");
for(int i=0;i<3;i++){
gets(str2[i]); /*这里识别了前面scanf遗留的 \n,所以获取的第一个字符串是空字符串,*/
}
printf("3个字符串为:\n");
for(int i=0;i<3;i++){
puts(str2[i]);
}
return 0;
}
解决方法:
用getchar将换行符 \n 吃掉
正确示例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
char str2[10][50];
printf("请输入一个整数:\n");
scanf("%d",&n);
printf("请输入3个字符串:\n");
getchar(); /*添加getchar将前面scanf遗留的 \n 吃掉*/
for(int i=0;i<3;i++){
gets(str2[i]);
}
printf("3个字符串为:\n");
for(int i=0;i<3;i++){
puts(str2[i]);
}
return 0;
}