0

我是一个新的 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

我很感激,谢谢!

4

5 回答 5

4

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

您不能用于putchar()打印字符串。尝试puts()printf()

\0并在遇到停止阅读的 '\n' 时添加一个字符来表示字符串的结尾。

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<leni1

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


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

于 2017-09-07T04:27:32.133 回答
2

getchar()并且putchar()只处理单个字符。

获取字符()-

是一个输入函数。它用于从控制台输入(通常是键盘)一次读取一个字符。
前任:

char c=getchar();

putchar()-

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

char c;
putchar(c);

您应该使用gets()andputs()来处理字符串,或者您可以使用printf()andscanf()

于 2017-09-07T04:43:45.623 回答
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;
}
于 2017-09-07T04:10:59.027 回答
-1

这就是您可以使用 getchar() 和 putchar() 进行输入和打印的方式。

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

我希望这有帮助。:)

于 2017-09-07T04:33:37.510 回答
-1

您可能需要了解更多关于编程和数据结构的知识。我会推荐SICP,这是一本优秀且免费的编程介绍(与 C无关)。

你需要更多地了解 C。特别是关于数组(但它们有限制,我让你找出哪些),也许struct,指针,C 动态内存分配。这应该需要你几个星期的时间,你需要阅读几本书(还有一些参考资料,比如这里,也许还可以浏览一下 C11 的规范,即n1570)。

(问问自己,如果您的程序的用户输入了 50 个字母甚至一百万个字母的名称,将会发生什么或应该发生什么;以及“错误”的输入,例如数字或标点符号呢?想想计算机内部的名称到底是什么)

由于您只需要使用getcharputchar,因此您需要仔细阅读它们的规范。请注意,stdio 经常在缓冲。也许您需要使用fflush

然后你可以将一个名字读入一些数据结构(我让你找出哪些),你可以一次读一个字符getchar来填充那个数据结构。同样,您可以使用 . 一次输出一个字符的数据结构putchar

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

我们不会做你的功课。

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

您是第一个开始学习 C 编程的人。坚持不懈,这需要一些时间(数周或数月的工作)。阅读几本书,查看现有 C 软件的源代码(例如github上的免费软件)。

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

于 2017-09-07T04:33:49.010 回答