鱼C论坛

 找回密码
 立即注册
查看: 791|回复: 14

[已解决]24课后题

[复制链接]
发表于 2020-4-14 11:36:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>
#define max 100
int main()
{
        int str[max]={1};
        int i,j;
        int *t=str;
        do 
        {
                *t++=atoi(getchar());
        }while(*t=='\0');

        int (*p)[3]=(int (*)[3])&str;

        for(i=0;i<3;i++)
        {
                for(j=0;j<3;j++)
                {
                        printf("%d ",p[i][j]);
                }
                printf("\n");
        }
        return 0;
}
捕获.PNG


捕2获.PNG

我想通过这样的一维数组输出
1 2 3
4 5 6
7 8 9
应该怎么弄??
最佳答案
2020-4-16 18:59:03
#include<stdio.h>
#include<stdlib.h>
#define max 100
int main()
{
        int str[max]={1};
        int i,j;
        char s[max];
        int *t=str;
        do 
        {
                *t++=atoi(fgets(s,max,stdin));
        }while(*(t-1) != 0);

        int (*p)[3]=(int (*)[3])&str;

        for(i=0;i<3;i++)
        {
                for(j=0;j<3;j++)
                {
                        printf("%d ",p[i][j]);
                }
                printf("\n");
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-16 08:39:45 | 显示全部楼层
将题中代码循环输出,可以用两个for (i = 0;i < 3;i ++)再加个条件当列为2时打印 \n,最好用下标法操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-16 12:08:50 | 显示全部楼层
Snopy 发表于 2020-4-16 08:39
将题中代码循环输出,可以用两个for (i = 0;i < 3;i ++)再加个条件当列为2时打印 \n,最好用下标法操作

我的代码是这样的哇但是出错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 15:55:03 | 显示全部楼层
先定义两个局部变量i,j,然后在后面用for循环嵌套for循环输出,大体就是这样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-16 16:05:56 | 显示全部楼层
冰激凌太烫 发表于 2020-4-16 15:55
先定义两个局部变量i,j,然后在后面用for循环嵌套for循环输出,大体就是这样的

你看我的代码,我嵌套了,但是出错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 18:37:01 | 显示全部楼层
孤世星辰 发表于 2020-4-16 12:08
我的代码是这样的哇但是出错了

我大概在网上查了有关atoi函数的用法
1:C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。
2:举个例子:(atoi的用法)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   int val;
   char str[20];
   
   strcpy(str, "5201314");
   val = atoi(str);
   printf("字符串值 = %s, 整型值 = %d\n", str, val);
}
   return  0;
3:也就是说atoi是需要把括号内的参数转化成一个整数(类型可为int或者其他),再赋值给一个整数型变量。而你的代码中atoi(getchar())是赋值给了一个指针。问题应该出在这里了,不知道我想的对不对hhh
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-16 18:51:55 | 显示全部楼层
冰激凌太烫 发表于 2020-4-16 18:37
我大概在网上查了有关atoi函数的用法
1:C 库函数 int atoi(const char *str) 把参数 str 所指向的字符 ...

那我定义了一个整型变量a让atoi赋值给a,然后再把a赋给*t,还是编译出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 18:56:28 | 显示全部楼层
孤世星辰 发表于 2020-4-16 18:51
那我定义了一个整型变量a让atoi赋值给a,然后再把a赋给*t,还是编译出错

当然不对,你在主函数里面已经声明t是指向str[max]这个数组的地址的,你再把变量a赋值给t,那就不对了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 18:59:03 | 显示全部楼层    本楼为最佳答案   
#include<stdio.h>
#include<stdlib.h>
#define max 100
int main()
{
        int str[max]={1};
        int i,j;
        char s[max];
        int *t=str;
        do 
        {
                *t++=atoi(fgets(s,max,stdin));
        }while(*(t-1) != 0);

        int (*p)[3]=(int (*)[3])&str;

        for(i=0;i<3;i++)
        {
                for(j=0;j<3;j++)
                {
                        printf("%d ",p[i][j]);
                }
                printf("\n");
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 19:10:07 | 显示全部楼层

大佬能否帮忙点拨一下:
do
        {
                *t++=atoi(fgets(s,max,stdin));
        }while(*(t-1) != 0);
这块代码的解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-16 19:12:55 | 显示全部楼层

SB0AIDKE0SX8ZF`]_@G]{@Y.png
这样只可以赋值给第一个元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 19:14:51 | 显示全部楼层
孤世星辰 发表于 2020-4-16 19:12
这样只可以赋值给第一个元素


是这样输入的
hhhh.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-16 19:30:55 | 显示全部楼层
冰激凌太烫 发表于 2020-4-16 19:10
大佬能否帮忙点拨一下:
do
        {

fgets获取一个字符串,转换为整数,赋值给*t,因为t++,所以到了while这里t=t+1,t要减去1才是当前的输入字符串转换后的整数,如果等于0就结束输入!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-16 19:32:28 | 显示全部楼层

*t++=atoi(fgets(s,max,stdin));我也想问一下为啥这样改就可以了,大佬可以解释一下咩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 20:16:44 | 显示全部楼层
Cool_Breeze 发表于 2020-4-16 19:30
fgets获取一个字符串,转换为整数,赋值给*t,因为t++,所以到了while这里t=t+1,t要减去1才是当前的输入 ...

多谢大佬的点拨
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 06:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表