LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 802|回复: 2

两个c问题(帮忙看看)

[复制链接]
发表于 2003-3-18 22:16:35 | 显示全部楼层 |阅读模式
问题一:

一段简单的程序(关于输入)有问题,想不明白,望大家指教。

#include <stdio.h>

int main(void)
{
  int box;
  
  printf("lease input a integer:");
  
  box = getchar();
  
  printf("\n You just input a '%d'.\n",box);

  return 0;
}

我输入一个数字,在turboc下显示出来的数字跟我输入的数字总是不相符,我都要疯了!求救,谢谢。

******************************************************************************************

问题二:

我数据结构课上写的一个创建单链表的程序。
我对程序的设想是
先创建一个头结点,
然后根据提示输入一个整数,
此时创建一个新结点,
将这个整数放到新结点的数据域中,
然后把新创建的结点和上一个结点链接起来,
这样就成了一个单链表。
但是输入的时候奇怪的事发生了,
我输入的整数有几位,
程序就输出(几+1)行Input next number,must be a bigger integer:
想不明白为什么这样。
请高手指教一下,谢谢。
(我想问题就是出在红色的那部分)



程序如下:
#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
  int data;
  struct node *next;
}linklist;

linklist *CreatLinkList()
{
   linklist *head,*s,*r;
   int get;
   
   head = malloc(sizeof(linklist));
   r = head;
   
   printf("lease input a integer:");
   get = getchar();
   
   while( get != 'q' )
   {
      s = malloc(sizeof(linklist));
      s->data = get;
      r->next = s;
      r =s;
      printf("\nInput next number,must be a bigger integer:");
      get = getchar();
   }

   
   r->next = NULL;
   
   return head;
}

int main(void)
{
   CreatLinkList();
   
   return 0;
}
发表于 2003-3-19 09:36:25 | 显示全部楼层
第一个问题很简单,这是我运行的结果:
[root@c4 programs]# gcc 1.c
[root@c4 programs]# ./a.out
Please input a integer:5

You just input a '53'.
出现这情况完全正常。因为是你用getchar()来接受输入的,这个函数是把输入当成是字母来处理,因此输入的内容被转换成ASCII码保存起来,如果用printf("%d", box),自然输出的就是这个字符的ASCIID码值。如果要按字符输出,要用printf("%c",box);
 楼主| 发表于 2003-3-19 09:46:33 | 显示全部楼层
谢谢.我已经解决了第二个问题

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
  int data;
  struct node *next;
}linklist;

linklist *CreatLinkList()
{
  linklist *head;
  linklist *s;
  linklist *r;
  int get;

  head = malloc(sizeof(linklist));
  r = head;

  printf("lease input a integer:");

  while( getchar() != 'q')
  {
    scanf("%d",&get);
    s = malloc(sizeof(linklist));
    s->data = get;
    s->next = s;
    r = s;
    printf("\nInput next number,must be a bigger integer:");
  }

  r->next = NULL;
  return head;
}

int main(void)
{
  CreatLinkList();

  return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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