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

Why can't I use a space in my array program?

本文关键字:空格 程序 不能 数组 为什么      更新时间:2023-10-16

如果我的输入是像"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();
}

您需要使用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();
}

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

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

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

你必须如上所述重写它们。数组的名称是一个地址。因此,如果你想指向它,你应该使用name而不是&name。并且你想要得到一个字符数组。所以您必须使用"%s"而不是"%c"

您正在接受一个接一个的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;
}

注意:当您尝试使用"scanf"进行字符串/字符数组输入时,不应该有"&"。(例如scanf("%s",名称);)