带空格的Scanf根本不读
#include <stdio.h>
int main(){
int i;
char name[10],surname[10],id[12],dpart[20];
printf("******** ID Documentation ***********\n\n\n");
printf("1) What is your Name? \n");
scanf("%s",&name);
printf("2) What is your Surname? \n");
scanf("%s",&surname);
printf("3) What is your ID Number \n");
scanf("%s",&id);
printf("4) What is your Department? \n");
scanf("%[^\n]",&dpart);
system("CLS");
for(i=0;i<50;i++){printf("*");}printf("\n");
printf("|");
for(i=0;i<48;i++){printf("%%");}
printf("|");printf("\n");printf("|");
for(i=0;i<14;i++){printf("%%");}
printf(" STUDENT ID CARD ");for(i=0;i<17;i++){printf("%%");}printf("|\n");printf("|");
for(i=0;i<48;i++){printf("%%");}
printf("|\n");
printf(" //////// NAME: %6s ",name);for(i=0;i<26;i++){printf("/");}printf(" \n|");for(i=0;i<48;i++){printf("-");}printf("|\n");
printf(" //////// SURNAME: %6s ",surname);for(i=0;i<23;i++){printf("/");}printf(" \n|");for(i=0;i<48;i++){printf("-");}printf("|\n");
printf(" //////// ID NUMVER: %11s ",id);for(i=0;i<16;i++){printf("/");}printf(" \n|");for(i=0;i<48;i++){printf("-");}printf("|\n");
printf(" //////// DEPARTMENT: %22s ",dpart);for(i=0;i<4;i++){printf("/");}printf(" \n|");for(i=0;i<48;i++){printf("-");}printf("|\n");
printf("|");
for(i=0;i<48;i++){printf("%%");}
printf("|");printf("\n");
printf("|");
for(i=0;i<48;i++){printf("%%");}
printf("|");printf("\n");
printf("|");
for(i=0;i<48;i++){printf("%%");}
printf("|");printf("\n");for(i=0;i<50;i++){printf("*");}
}
我帮助我的一位朋友做家庭作业。我们必须阅读部门数据而不是将其显示在身份证上,但是当涉及阅读部门时,程序会跳过它并将输入的ID值添加到部门。 Ps:我知道使用scanf()是一个非常糟糕的工作,但他们没有学到别的东西,所以我不能建议对他使用sscanf 而且在写出数据时也不在乎乱码,它的工作原理是带空格的Scanf根本不读
的问题是,必须在输入缓冲器的未消耗的换行符。在格式字符串的空间会消耗零个或多个空白字符,这样你就可以通过改变这一行解决问题包括%
前一个空间,如下所示:
scanf(" %[^\n]",dpart);
感谢哥们,太棒了:D – gkaykck 2010-10-29 15:08:23
的scanf(“%S”)通常需要一个字作为输入,就可以解决这个问题使用
scanf("%[^\n]s")
,这意味着你将接受任何字符,但\ n的输入。
如果这不起作用,建议使用fgets如bjskishore123。他有一个使用它的例子。
我已经在代码中使用它,但它不工作,不工作,如果我最后添加s – gkaykck 2010-10-21 17:28:36
您需要使用fgets而不是scanf来读取空格。
这里的工作程序
#include <stdio.h>
int main(){
int i;
char name[10],surname[10],id[12],dpart[20];
char tmpBuf[3];
printf("******** ID Documentation ***********\n\n\n");
printf("1) What is your Name? \n");
//scanf("%s",&name);
fgets(name,8,stdin);
fgets(tmpBuf, 2, stdin);
printf("2) What is your Surname? \n");
//scanf("%s",&surname);
fgets(surname,9,stdin);
fgets(tmpBuf, 2, stdin);
printf("3) What is your ID Number \n");
//scanf("%s",&id);
fgets(id,11,stdin);
fgets(tmpBuf, 1, stdin);
printf("4) What is your Department? \n");
//scanf("%[^\n]",&dpart);
fgets(dpart,19,stdin);
system("CLS");
for(i=0;i<50;i++){printf("*");}printf("\n");
printf("|");
for(i=0;i<48;i++){printf("%%");}
printf("|");printf("\n");printf("|");
for(i=0;i<14;i++){printf("%%");}
printf(" STUDENT ID CARD ");for(i=0;i<17;i++){printf("%%");}printf("|\n");printf("|");
for(i=0;i<48;i++){printf("%%");}
printf("|\n");
printf(" //////// NAME: %6s ",name);for(i=0;i<26;i++){printf("/");}printf(" \n|");for(i=0;i<48;i++){printf("-");}printf("|\n");
printf(" //////// SURNAME: %6s ",surname);for(i=0;i<23;i++){printf("/");}printf(" \n|");for(i=0;i<48;i++){printf("-");}printf("|\n");
printf(" //////// ID NUMVER: %11s ",id);for(i=0;i<16;i++){printf("/");}printf(" \n|");for(i=0;i<48;i++){printf("-");}printf("|\n");
printf(" //////// DEPARTMENT: %22s ",dpart);for(i=0;i<4;i++){printf("/");}printf(" \n|");for(i=0;i<48;i++){printf("-");}printf("|\n");
printf("|");
for(i=0;i<48;i++){printf("%%");}
printf("|");printf("\n");
printf("|");
for(i=0;i<48;i++){printf("%%");}
printf("|");printf("\n");
printf("|");
for(i=0;i<48;i++){printf("%%");}
printf("|");printf("\n");for(i=0;i<50;i++){printf("*");}
}
让我知道如果你还有问题。
-1“fflush(stdin)”是未定义的行为,请参见ANSI – user411313 2010-10-21 18:02:00
fflush已删除,fgets是用于删除stdin中的字符。你可以删除downvote? :) – bjskishore123 2010-10-21 18:43:58
scanf
返回成功分配的数量。 使用返回值(编辑)ON ALL SCANF CALLS
/* ... */
printf("1) What is your Name? \n");
if (scanf("%s",&name) != 1) { /* error */ printf("error on line %d.\n", __LINE__); }
printf("2) What is your Surname? \n");
if (scanf("%s",&surname) != 1) { /* error */ printf("error on line %d.\n", __LINE__); }
/* ... */
**坏主意** ...和也不关心凌乱的代码,当显示它的人可能会帮助你... – pmg 2010-10-21 17:16:49
开始并不凌乱,这就是我需要帮助,其余作品,所以这就是为什么我不在乎 – gkaykck 2010-10-21 17:20:09
也从scanf到fgets根本不会改变什么 – gkaykck 2010-10-21 17:22:45