C提示使用getchar()读取字符串

蓝鸟

这是一个新手问题。我是C编程新手。我有以下代码,不提示输入“名称”,而是输入“年龄”,它绕过了“名称”部分。

#include <stdio.h>

int main()
{
    char name[30],ch;
    int age;

    printf("Enter age : ");
    scanf("%d", &age);

    int i=0;
    printf("Enter name: ");

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

    printf("Name: %s\n",name);
    printf("Age : %d\n", age);
    return 0;
}

阅读第一个提示后,它将绕过使用getchar()函数的第二个提示。但是,如果我更改提示顺序,先要求输入“名称”,然后要求“年龄”,则效果很好。

工作代码。

#include <stdio.h>

int main()
{
    char name[30],ch;
    int age;

    int i=0;
    printf("Enter name: ");

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

    printf("Enter age : ");
    scanf("%d", &age);

    printf("Name: %s\n",name);
    printf("Age : %d\n", age);
    return 0;
}

我的编码IDE是CodeBlock,我的编译器是GNU C编译器(mingw32-gcc.exe)

请帮助我突破。

李·杜姆

对问题代码的一些改进/建议:

  1. 返回值的类型getchar()int,因此的类型ch也应为int
  2. 您可以(而且应该,我相信)使用format%s来读取name,这更容易,并且输入流中的前导空格也不成问题。
  3. 代码的用户可能会给出一个包含超过30个字符的名称,并且此输入可能会使您的程序崩溃,因此您应该保护这种代码。您有两种选择:

    一个。使用格式'%29s'来读取name
    b。将的定义更改namechar *name,由读取scanf("%ms", &name);,然后free(name);在不再需要它时调用

这是一个示例,其中名称可以很长并且可以包含空格:

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

int
main(int argc, char *argv[])
{
    char *name;
    int age;

    printf("Enter name: ");
    scanf("%m[^\n]", &name);

    printf("Enter age: ");
    scanf("%d", &age);

    printf("Name: %s\n", name);
    printf("Age : %d\n", age);

    free(name);

    exit(EXIT_SUCCESS);
}

这是它的运行方式:

$ ./a.out 
Enter name: a very looooooooooooooooooooooooooooooooooooooooooooooong name
Enter age: 12
Name: a very looooooooooooooooooooooooooooooooooooooooooooooong name
Age : 12

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C提示使用getchar()读取字符串

来自分类Dev

从文件C ++读取字符串

来自分类Dev

在C ++中读取字符串

来自分类Dev

在C ++中读取字符串

来自分类Dev

使用sscanf读取字符串

来自分类Dev

读取整数后C无法读取字符串

来自分类Dev

在C中逐字符读取字符串

来自分类Dev

在C中逐字符读取字符串

来自分类Dev

字符串的C ++错误读取字符

来自分类Dev

从共享内存C ++ POSIX中读取字符串

来自分类Dev

在C中从文件读取字符串输入

来自分类Dev

Beckhoff C#从PLC读取字符串数组

来自分类Dev

在C中读取字符串时scanf的行为

来自分类Dev

C ++读取字符串分段错误

来自分类Dev

目标C:从CSV文件中读取字符串

来自分类Dev

读取字符串直到标志 (C++)

来自分类Dev

使用istream_iterator读取字符串

来自分类Dev

使用NSUserDefaults读取字符串不起作用

来自分类Dev

使用scanf读取字符串作为输入

来自分类Dev

使用Unsafe编写和读取字符串

来自分类Dev

如何使用SOS读取字符串?

来自分类Dev

使用istream_iterator读取字符串

来自分类Dev

如何使用cJSON读取字符串

来自分类Dev

了解使用扫描仪读取字符串

来自分类Dev

在函数内部使用 JSON 读取字符串

来自分类Dev

c ++使用fstream从二进制文件读取字符串

来自分类Dev

C#-通过逐字符读取字符串来读取NewLine字符

来自分类Dev

读取字符串,直到换行

来自分类Dev

Lua读取字符串的开头