如果我的输入是一个很长的名字,如“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();
}
答案 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);)