鱼C论坛

 找回密码
 立即注册
查看: 13907|回复: 27

一个小问题,新手求助

[复制链接]
发表于 2015-11-11 20:05:42 | 显示全部楼层 |阅读模式

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

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

x
  我想输出我所输入的字符个数
#include <stdio.h>
void main()
{
  char a;
  int  i=0;
  scanf("%c",&a);
  while(a!='\n')
{
     i++;
}
   printf("输入字符个数:%d",i);
}

可以输入数据,按了空格之后没输出结果,光标好像跳到一个空格,好像就输出了一个空格。
QQ截图20151111200755.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-11 21:43:11 From FishC Mobile | 显示全部楼层
根据你的意思,应该是这个样子
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-11 21:43:56 From FishC Mobile | 显示全部楼层
#include <stdio.h> int main() {         char a[100];         for(int i=0;i<100;i++)     {             a[i]='\0';     }         int i=0;         scanf("%s",&a);         for(int j=0;j<100;j++)         {                 if(a[j]!='\0')                 {                         i++;                 }         }         printf("%d",i); }
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-11 21:57:31 | 显示全部楼层
乞浆 发表于 2015-11-11 21:43
#include  int main() {         char a[100];         for(int i=0;i

一定要用数组吗?我直接这样怎么不行,你知道吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-11 22:13:07 From FishC Mobile | 显示全部楼层
不行,char a;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-11 22:13:38 From FishC Mobile | 显示全部楼层
只代表一个字符
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-11 22:14:19 From FishC Mobile | 显示全部楼层
只代表一个字符
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-11 22:15:39 From FishC Mobile | 显示全部楼层
乞浆 发表于 2015-11-11 22:13
不行,char a;

char a;只代表一个字符,不能输入字符串
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-11 22:24:51 | 显示全部楼层
先改了你的问题代码:把VOID MAIN改成INT MAIN(VOID)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-12 11:42:19 | 显示全部楼层
乞浆 发表于 2015-11-11 22:15
char a;只代表一个字符,不能输入字符串

哦!所以要用数组来放字符吗?

点评

在MFC还有很多可以直接存放变量的命令  发表于 2015-11-15 18:27
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-12 11:43:15 | 显示全部楼层
cccp 发表于 2015-11-11 22:24
先改了你的问题代码:把VOID MAIN改成INT MAIN(VOID)

void main()怎么有问题?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-12 13:53:53 | 显示全部楼层
一条迷茫小鱼 发表于 2015-11-12 11:43
void main()怎么有问题?

K&R,ANSI C,C99都没有定义过void main这个“中国制造”
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-12 18:48:39 | 显示全部楼层
乞浆 发表于 2015-11-11 21:43
#include  int main() {         char a[100];         for(int i=0;i

你这代码我试过好像不行,还是没输出。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-12 22:50:37 From FishC Mobile | 显示全部楼层
应该可以,我编译过,可以输出呀,你改一下缩进
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-13 15:11:05 | 显示全部楼层
void main代表没有返回值的主函数,在 C 和 C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把main函数定义成void main(void) 。然而这是错误的!main 函数的返回值应该定义为 int 类型,C 和 C++ 标准中都是这样规定的。虽然在一些编译器中,void main 可以通过编译(如 vc6),但并非所有编译器都支持 void main ,因为标准中从来没有定义过 void main 。g++3.2 中如果 main 函数的返回值不是 int 类型,就根本通不过编译。而 gcc3.2 则会发出警告。所以,如果你想你的程序拥有很好的可移植性,请一定要用 int main 。作为一个初学者要养成好习惯。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-11-13 20:41:50 | 显示全部楼层
可以不用数组

#include<stdio.h>
void main()
{
        char a;
        int  i = 0;
        while (a = getchar() != '\n')
        {
                i++;
        }
        printf("输入字符个数:%d\n", i);
}

点评

不,我坚决不同意楼主的看法!: 5.0
不,我坚决不同意楼主的看法!: 5
那你信不信我这么输入 asdasdfasdfa 你的程序就没用了  发表于 2015-11-15 18:16
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-13 20:49:41 | 显示全部楼层
15楼说的对~最好还是用int main(),C98时代有void main的写法,不过C99标准中只有int main(void)和int main(int argc, char *argv[])两种标准写法了~有些编译器是不支持void main()的~最好按规范写~返回值是int型,注意要在main函数结束时写return 0;(虽然不写的话,有些编译器可以自动生成。。)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-14 10:21:04 | 显示全部楼层
0xcc 发表于 2015-11-13 20:41
可以不用数组

#include

是不是定义了char a  那么a就是要用字符输入getchar()来才行啊。用scanf做输入就要用数组存放每个字符,是这个意思吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-14 10:46:18 | 显示全部楼层
不是,用getchar是因为比较方便,直接返回读到的字符,scanf的返回值是是赋值成功的数据项~
用scanf可以改成这样:
#include<stdio.h>
void main()
{
        char a;
        int  i = 0;
        scanf("%c", &a);//循环之前先读一个字符用于第一次循环条件判断
        while ( a!= '\n')
        {
                i++;
                scanf("%c", &a);//每次循环读一个字符用于下次循环条件判断
        }
        printf("输入字符个数:%d\n", i);
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2015-11-15 16:48:07 | 显示全部楼层
0xcc 发表于 2015-11-14 10:46
不是,用getchar是因为比较方便,直接返回读到的字符,scanf的返回值是是赋值成功的数据项~
用scanf可以改 ...

嗯。原来我是没想到要一直通过一个个字符判断,只是想着一串字符来判断。顺便请教一下,那用数组存放数据后再判断数组里的数据是不是有\n就不行吗,或者怎么用数组来做。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 21:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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