C语言getchar()和putchar()

时间:2017-09-07 04:01:27

标签: c getchar putchar

我是一名新的C语言学习者,我在下面遇到问题,我试图打印出名称,但它没有打印出来。这就是我试过的:

#include <stdio.h>
#include <ctype.h>

int main()
{
    char name;
    int len = 0;

    printf("Enter the user name: ");
    name = getchar();

    while (name != '\n')
    {
        len++;
        name = getchar();
    }

    printf("char = %d\n", len);
    printf("name = ");
    putchar(name);

    return (0); 
}

输出:

Enter the user name: abcd
len = 4
name = 

它应打印出name = abcd

我很感激,谢谢!

5 个答案:

答案 0 :(得分:3)

getchar()putchar()一次只能处理单个字符。 由于您需要存储基本上是字符序列的字符串,因此需要将name声明为字符数组。

您无法使用putchar()打印字符串。试试puts()printf()

当您遇到'\ n'时,添加一个\0字符来表示字符串的结尾,此时您将停止阅读。

char name[20];
int len = 0;

printf("Enter the user name: ");
name[len] = getchar();

while (name[len] != '\n')
{
    name[++len] = getchar();
}
name[++len]='\0';

如果必须使用putchar()来打印字符串,则字符串的长度为len。使用变量i=0创建一个循环,并在i<len增加i的同时继续迭代1

for(i=0; i<len; ++i)
{
    putchar(name[i]);
}


您可能希望进行一些错误检查以确保getchar()正常工作。它会在出错时返回EOF 并且name应该足够大以容纳输入字符串。

答案 1 :(得分:2)

getchar()putchar()仅处理单个字符。

的getchar() -

是输入功能。它用于从控制台输入(通常是键盘)一次读取一个字符。
例如:

char c=getchar();

的putchar() -

是输出功能。它用于一次在控制台输出(通常是监视器)上显示一个字符。它接受一个字符类型的参数。
例如:

char c;
putchar(c);

您应该使用gets()puts()来处理字符串,或者使用printf()scanf()

答案 2 :(得分:0)

首先了解C中的数组概念。

使用scanf()printf(),如下所示:

#include <stdio.h>

int main(){
    char name[20];
    printf("Enter the name: ");
    scanf("%s", name);

    printf("Name: %s", name);
    return 0;
}

答案 3 :(得分:-1)

这是使用getchar()和putchar()进行输入和打印的方法。

#include <stdio.h>
int main(void)
{   
int name;
printf("Enter the user name: ");
    while ((name = getchar()) != EOF)
         putchar(name);
    return 0;
    }

我希望这会有所帮助。 :)

答案 4 :(得分:-1)

您可能需要了解有关编程和data structures的更多信息。我会推荐SICP,这是一本优秀且免费提供的编程介绍(关于C)。

你需要了解更多C.特别关于arrays(但他们有局限性,我让你找出哪些),也许是struct,指针,C dynamic memory allocation。这应该花费你几个星期,你需要阅读几本书(以及一些参考资料,如here,也许还要看一下C11的规范,即n1570)。

(问问自己,如果你的程序用户输入了50个字母,甚至一百万个字母的名称,会发生什么或应该发生什么;以及&#34;错误&#34;输入,例如数字或标点符号?想想计算机里面的名字是什么?

由于您只需要使用getcharputchar,因此您需要仔细阅读其规范。请注意,stdio通常是buffering。也许您需要使用fflush

然后你可以在一些数据结构中读取一个名称(我让你找出哪些),你可以使用getchar一次读取一个字符来填充该数据结构。同样,您可以使用putchar一次一个字符输出该数据结构。

当然,您将使用一些control flow原语(可能是某种循环)。

我们不会做你的功课。

不要忘记在编译器中启用所有警告和调试信息(例如,如果使用GCC ....,则使用gcc -Wall -Wextra -g进行编译。阅读有关编译器的文档(例如,查看Invoking GCC章节)。当然,了解如何使用调试器(gdb,请参阅Debugging with GDB

你是开始学习C编程的人。坚持不懈,需要一些时间(数周或数月的工作)。阅读一些书籍,查看C语言中现有软件的源代码(例如free software上的github)。

PS。对于C语言的专家来说,做好功课是微不足道的;但是你应该自己学习 - 作业的目的是教你一些东西 - 如果你从其他地方复制一个解决方案你就不会学到任何东西