孤世星辰 发表于 2020-4-14 11:36:37

24课后题

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

        int (*p)=(int (*))&str;

        for(i=0;i<3;i++)
        {
                for(j=0;j<3;j++)
                {
                        printf("%d ",p);
                }
                printf("\n");
        }
        return 0;
}





我想通过这样的一维数组输出
1 2 3
4 5 6
7 8 9
应该怎么弄??

Snopy 发表于 2020-4-16 08:39:45

将题中代码循环输出,可以用两个for (i = 0;i < 3;i ++)再加个条件当列为2时打印 \n,最好用下标法操作

孤世星辰 发表于 2020-4-16 12:08:50

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

我的代码是这样的哇但是出错了

冰激凌太烫 发表于 2020-4-16 15:55:03

先定义两个局部变量i,j,然后在后面用for循环嵌套for循环输出,大体就是这样的{:10_257:}

孤世星辰 发表于 2020-4-16 16:05:56

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

你看我的代码,我嵌套了,但是出错了

冰激凌太烫 发表于 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;
   
   strcpy(str, "5201314");
   val = atoi(str);
   printf("字符串值 = %s, 整型值 = %d\n", str, val);
}
   return0;
3:也就是说atoi是需要把括号内的参数转化成一个整数(类型可为int或者其他),再赋值给一个整数型变量。而你的代码中atoi(getchar())是赋值给了一个指针。问题应该出在这里了,不知道我想的对不对hhh{:10_248:}

孤世星辰 发表于 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,还是编译出错

冰激凌太烫 发表于 2020-4-16 18:56:28

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

当然不对,你在主函数里面已经声明t是指向str这个数组的地址的,你再把变量a赋值给t,那就不对了

Cool_Breeze 发表于 2020-4-16 18:59:03

#include<stdio.h>
#include<stdlib.h>
#define max 100
int main()
{
      int str={1};
      int i,j;
      char s;
      int *t=str;
      do
      {
                *t++=atoi(fgets(s,max,stdin));
      }while(*(t-1) != 0);

      int (*p)=(int (*))&str;

      for(i=0;i<3;i++)
      {
                for(j=0;j<3;j++)
                {
                        printf("%d ",p);
                }
                printf("\n");
      }
      return 0;
}

冰激凌太烫 发表于 2020-4-16 19:10:07

Cool_Breeze 发表于 2020-4-16 18:59


大佬能否帮忙点拨一下:
do
      {
                *t++=atoi(fgets(s,max,stdin));
      }while(*(t-1) != 0);
这块代码的解释

孤世星辰 发表于 2020-4-16 19:12:55

Cool_Breeze 发表于 2020-4-16 18:59



这样只可以赋值给第一个元素

冰激凌太烫 发表于 2020-4-16 19:14:51

孤世星辰 发表于 2020-4-16 19:12
这样只可以赋值给第一个元素

是这样输入的

Cool_Breeze 发表于 2020-4-16 19:30:55

冰激凌太烫 发表于 2020-4-16 19:10
大佬能否帮忙点拨一下:
do
      {


fgets获取一个字符串,转换为整数,赋值给*t,因为t++,所以到了while这里t=t+1,t要减去1才是当前的输入字符串转换后的整数,如果等于0就结束输入!

孤世星辰 发表于 2020-4-16 19:32:28

Cool_Breeze 发表于 2020-4-16 18:59


*t++=atoi(fgets(s,max,stdin));我也想问一下为啥这样改就可以了,大佬可以解释一下咩

冰激凌太烫 发表于 2020-4-16 20:16:44

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

多谢大佬的点拨
页: [1]
查看完整版本: 24课后题