一条迷茫小鱼 发表于 2015-11-11 20:05:42

一个小问题,新手求助

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

可以输入数据,按了空格之后没输出结果,光标好像跳到一个空格,好像就输出了一个空格。

乞浆 发表于 2015-11-11 21:43:11

根据你的意思,应该是这个样子

乞浆 发表于 2015-11-11 21:43:56

#include <stdio.h> int main() {         char a;         for(int i=0;i<100;i++)   {           a='\0';   }         int i=0;         scanf("%s",&a);         for(int j=0;j<100;j++)         {                 if(a!='\0')                 {                         i++;                 }         }         printf("%d",i); }

一条迷茫小鱼 发表于 2015-11-11 21:57:31

乞浆 发表于 2015-11-11 21:43
#includeint main() {         char a;         for(int i=0;i

一定要用数组吗?我直接这样怎么不行,你知道吗?

乞浆 发表于 2015-11-11 22:13:07

不行,char a;

乞浆 发表于 2015-11-11 22:13:38

只代表一个字符

乞浆 发表于 2015-11-11 22:14:19

只代表一个字符

乞浆 发表于 2015-11-11 22:15:39

乞浆 发表于 2015-11-11 22:13
不行,char a;

char a;只代表一个字符,不能输入字符串

cccp 发表于 2015-11-11 22:24:51

先改了你的问题代码:把VOID MAIN改成INT MAIN(VOID)

一条迷茫小鱼 发表于 2015-11-12 11:42:19

乞浆 发表于 2015-11-11 22:15
char a;只代表一个字符,不能输入字符串

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

一条迷茫小鱼 发表于 2015-11-12 11:43:15

cccp 发表于 2015-11-11 22:24
先改了你的问题代码:把VOID MAIN改成INT MAIN(VOID)

void main()怎么有问题?

cccp 发表于 2015-11-12 13:53:53

一条迷茫小鱼 发表于 2015-11-12 11:43
void main()怎么有问题?

K&R,ANSI C,C99都没有定义过void main这个“中国制造”

一条迷茫小鱼 发表于 2015-11-12 18:48:39

乞浆 发表于 2015-11-11 21:43
#includeint main() {         char a;         for(int i=0;i

你这代码我试过好像不行,还是没输出。

乞浆 发表于 2015-11-12 22:50:37

应该可以,我编译过,可以输出呀,你改一下缩进

flsn2007 发表于 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 。作为一个初学者要养成好习惯。

0xcc 发表于 2015-11-13 20:41:50

可以不用数组

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

0xcc 发表于 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;(虽然不写的话,有些编译器可以自动生成。。)

一条迷茫小鱼 发表于 2015-11-14 10:21:04

0xcc 发表于 2015-11-13 20:41
可以不用数组

#include


是不是定义了char a那么a就是要用字符输入getchar()来才行啊。用scanf做输入就要用数组存放每个字符,是这个意思吗?

0xcc 发表于 2015-11-14 10:46:18

不是,用getchar是因为比较方便,直接返回读到的字符,scanf的返回值是是赋值成功的数据项~
用scanf可以改成这样:
#include<stdio.h>
void main()
{
        char a;
        inti = 0;
        scanf("%c", &a);//循环之前先读一个字符用于第一次循环条件判断
        while ( a!= '\n')
        {
                i++;
                scanf("%c", &a);//每次循环读一个字符用于下次循环条件判断
        }
        printf("输入字符个数:%d\n", i);
}

一条迷茫小鱼 发表于 2015-11-15 16:48:07

0xcc 发表于 2015-11-14 10:46
不是,用getchar是因为比较方便,直接返回读到的字符,scanf的返回值是是赋值成功的数据项~
用scanf可以改 ...

嗯。原来我是没想到要一直通过一个个字符判断,只是想着一串字符来判断。顺便请教一下,那用数组存放数据后再判断数组里的数据是不是有\n就不行吗,或者怎么用数组来做。
页: [1] 2
查看完整版本: 一个小问题,新手求助