#include<stdio.h> #include<string.h> int main() { int i=0,j,k,n,t,m,x; char c[101],a[101]; scanf("%d",&t); while(i<t) { scanf("%d %d",&m,&n); getchar(); gets(c); x=strlen(c); j=0; if(n>x) n=x-1; for(k=m;k<=n;k++) { a[j]=c[k]; j++; } i++; puts(a); } }他为什么输出我没有输入的字符
时间: 2023-11-30 14:02:32 浏览: 79
这段代码的问题在于,定义了字符数组 `a`,但没有初始化。因此,当从输入流中读取字符串时,`a`中可能会存在之前的遗留字符,导致输出的结果不正确。
为了解决这个问题,可以在每次循环开始前,将字符数组 `a` 中的元素全部清零,可以使用 `memset` 函数实现:
```
memset(a, 0, sizeof(a));
```
另外,在输出字符串前,需要在字符串的末尾添加一个结束符 `\0`,否则可能会输出一些无法预知的字符。可以在字符数组 `a` 的最后一个位置手动添加 `\0`:
```
a[j] = '\0';
```
修改后的代码如下:
```
#include <stdio.h>
#include <string.h>
int main() {
int i = 0, j, k, n, t, m, x;
char c[101], a[101];
scanf("%d", &t);
while (i < t) {
scanf("%d %d", &m, &n);
getchar();
gets(c);
x = strlen(c);
j = 0;
if (n > x)
n = x - 1;
memset(a, 0, sizeof(a)); // 清空字符数组 a
for (k = m; k <= n; k++) {
a[j] = c[k];
j++;
}
i++;
a[j] = '\0'; // 添加字符串结束符
puts(a);
}
return 0;
}
```
阅读全文