为什么我不能在我的数组程序中使用空格?

时间:2013-12-13 17:07:49

标签: c++ c arrays

如果我的输入是一个很长的名字,如“lsdhfjkhsdkjhfgkjhasd”,则可以打印出来。但是,如果我在“fsdaf fdsaf dsaf”这样的名称之间使用空格,那么它就不会显示。

int main () {
    int total_hours;
    char name[100],category[140],nic[140];

    printf("Name:\n");
    scanf("%s",&name);

    printf("NIC:\n");
    scanf("%s",&nic);

    printf("category:\n");
    scanf("%s",&category);

    printf("Total Hours:\n");
    scanf("%d",&total_hours);
    printf("%s \n  %s \n  %s \n  %d \n ",name,nic,category,total_hours);
    getch();
}

4 个答案:

答案 0 :(得分:2)

你需要使用fgets,scanf在空格上结束。对于C ++,您应该使用更高级别的构造。例如cin,cout

示例

fgets(name, 100, stdin);

答案

#include <stdio.h>
int main () {
int total_hours;
char name[100],category[140],nic[140];

printf("Name:\n");
fgets(name, 100, stdin);

printf("NIC:\n");
fgets(category, 140, stdin);

printf("category:\n");
fgets(nic, 140, stdin);

printf("Total Hours:\n");
scanf("%d", &total_hours);
printf("%s \n  %s \n  %s \n  %d \n ",name,nic,category,total_hours);
getch();
}

答案 1 :(得分:1)

基本上scanf将输入文本复制到你的数组中 限制是scanf在遇到空格时停止。 因此,您的第一个单词将被成功复制,但剩下的部分将被丢弃。

您可以使用“word1_word2”“word1 word2”短语轻松进行测试。您将看到,第一个将被成功复制,但对于第二个将只复制“word1”,因为scanf将在它读取两个单词之间的第一个空格时停止。

答案 2 :(得分:0)

printf("Name:\n");
scanf("%s",name);

你必须像上面那样重写它们。数组的名称是一个地址。因此,如果您想指向它,则应使用name代替&name。你想得到一个字符数组。所以你必须使用"%s"而不是"%c"

答案 3 :(得分:0)

您正在逐个接受char数组输入。当他获得空间分离输入时,它也将空格作为输入。请检查以下代码:

#include<stdio.h>

int main () {
    int total_hours;
    char name[100],category[140],nic[140];

    printf("Name:\n");
    gets(name);

    printf("NIC:\n");
    gets(nic);

    printf("category:\n");
    gets(category);

    printf("Total Hours:\n");
    scanf("%d",&total_hours);
    printf("%s \n  %s \n  %s \n  %d \n ",name,nic,category,total_hours);

    return 0;

}

N.B。当你尝试使用“scanf”获取字符串/字符串数组输入时,应该没有“&amp;”。 (例如scanf(“%s”,name);)