70,037
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
void rev_string(char s[][128],int n)
{
int i,k;
for(i=0;i<n;i++) {
int j=0;
while(s[i][j])
j++;
for(k=0; k<j/2 ;k++){
int tmp=s[i][k];
s[i][k]=s[i][(j-1)-k];
s[i][(j-1)-k]=tmp;
}
printf("s[%d]=\"%s\"\n",i,s[i]);
}
}
int main()
{
int i,n;
char carry[128][128];
printf("设定几维数组:");
scanf("%d",&n);
getchar();
for(i=0; i<n; i++){
gets(carry[i]);
}
rev_string(carry,n);
return 0;
}
在scanf后面加一句getchar();即可
原因是gets是遇到回车结束输入,那么scanf输入后会输入回车,那么有一个回车符在输入缓存里,所以第一个gets读到了回车符直接返回了。所以是空串;
另外,建议使用fgets可以提高程序的安全性
char buf[32];
fgets(buf, 32, stdin);
buf[strlen(buf)-1] = 0; /* 0 is equal to '\0'*/
stdin是标准输入(键盘);
fgets有一个问题,就是若输入的字符数少于第二个参数减1时,会将回车符加入到字符串中。所以,需要单独一步用于去掉回车符;没人呢 ??