#include <stdio.h> int main(){ char poem[4][24]; int i, j; for (i=0; i<4; i++){ gets(poem[i]); for (j=0; j<3; j++){ putchar(poem[i][j]); } } return 0; }注释
时间: 2024-03-12 19:50:14 浏览: 16
这是一个使用 C 语言编写的程序,功能是读取用户输入的四行诗句并输出每行诗句的前三个字符。
下面是代码的解释:
```c
#include <stdio.h>
```
该行代码表示引入标准输入输出库。
```c
int main(){
```
程序入口函数,返回值类型为整型。
```c
char poem[4][24];
```
定义一个二维字符数组 `poem`,有 4 行 24 列,用于存储用户输入的四行诗句。
```c
int i, j;
```
定义两个整型变量 `i` 和 `j`,用于循环计数。
```c
for (i=0; i<4; i++){
gets(poem[i]);
for (j=0; j<3; j++){
putchar(poem[i][j]);
}
}
```
使用 `for` 循环读取用户输入的四行诗句,`gets()` 函数用于读取一行字符,存入 `poem` 数组中的第 `i` 行。接着使用 `for` 循环输出每行诗句的前三个字符,使用 `putchar()` 函数输出单个字符。
```c
return 0;
```
程序执行完毕后返回 0,表示正常结束。
相关问题
#include<stdio.h> #include<math.h> #include<string.h> #include <stdlib.h> char* change(char *s[], int n); int main(void) { char poem[4][20]; int n,i; for (i = 0; i < 4; i++) { scanf("%s", poem[i]); } printf("%s",change(poem, 4)); return 0; } char* change(char *s[], int n) { char* a = NULL; a = (char*)malloc(sizeof(char) * 10); int i; for (i = 0; i < n; i++) { a[2 * i] = s[i][0]; a[2 * i + 1] = s[i][1]; } a[2 * i] = '\0'; return a; }输入一首诗,这段代码并没有输出由每行诗首个字组成的字符串,原因出在哪里?
这段代码的问题在于,输入的诗歌没有按照要求存储在 char poem[4][20] 数组中。程序中使用了 scanf("%s", poem[i]) 来读取每一行诗,但是并没有限制每一行诗的长度。如果输入的某一行诗的长度超过了 19 个字符,就会导致数组越界,从而出现未定义的行为。
为了避免这种情况,可以使用 fgets() 函数来读取每一行诗,同时指定读取的最大字符数为 19(因为每一行最多只有 19 个字符,再加上一个空字符)。
修改后的代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* change(char *s[], int n);
int main(void)
{
char poem[4][20];
int n, i;
for (i = 0; i < 4; i++)
{
fgets(poem[i], sizeof(poem[i]), stdin);
}
printf("%s", change(poem, 4));
return 0;
}
char* change(char *s[], int n)
{
char* a = NULL;
a = (char*)malloc(sizeof(char) * 10);
int i;
for (i = 0; i < n; i++)
{
a[2 * i] = s[i][0];
a[2 * i + 1] = s[i][1];
}
a[2 * i] = '\0';
return a;
}
```
修改后的代码中使用了 fgets() 函数来读取每一行诗,同时使用 sizeof(poem[i]) 来指定最大的字符数。由于每一行最多只有 19 个字符,再加上一个空字符,因此最大的字符数为 20。
#include <stdio.h> #include <stdlib.h> #include <string.h> char* change(char *s[], int n); int main(void) { char poem[4][20]; int n, i; for (i = 0; i < 4; i++) { fgets(poem[i], sizeof(poem[i]), stdin); } printf("%s", change(poem, 4)); return 0; } char* change(char *s[], int n) { char* a = NULL; a = (char*)malloc(sizeof(char) * 10); int i; for (i = 0; i < n; i++) { a[2 * i] = s[i][0]; a[2 * i + 1] = s[i][1]; } a[2 * i] = '\0'; return a; }输入一首诗,这段代码并没有输出由每行诗首个字组成的字符串,原因出在哪里?
这段代码的问题在于输出的时候使用了 %s 格式化符号,但是实际上返回的是一个字符数组的地址。%s 格式化符号是用来输出以空字符结尾的字符串的,因此会导致输出不正确。
为了解决这个问题,可以使用循环遍历字符数组,逐个输出其中的字符。同时,为了避免输出多余的字符,应该在循环中判断当前字符是否为空字符,如果为空字符,则退出循环。
修改后的代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* change(char *s[], int n);
int main(void)
{
char poem[4][20];
int n, i;
for (i = 0; i < 4; i++)
{
fgets(poem[i], sizeof(poem[i]), stdin);
}
char* result = change(poem, 4);
for (i = 0; result[i] != '\0'; i++)
{
printf("%c", result[i]);
}
return 0;
}
char* change(char *s[], int n)
{
char* a = NULL;
a = (char*)malloc(sizeof(char) * 10);
int i;
for (i = 0; i < n; i++)
{
a[2 * i] = s[i][0];
a[2 * i + 1] = s[i][1];
}
a[2 * i] = '\0';
return a;
}
```
修改后的代码中,输出结果时使用了循环逐个输出字符的方式,确保输出结果正确。同时,为了方便输出,将返回值赋值给了一个指针变量 result。
相关推荐
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)