我是一个初学者在C,所以我有一个问题,让用户输入姓氏,逗号&然后名。但是它会传递给函数调用获取用户输入名称,但使用文件流* fp
INT GET_NAME(FILE * FP)
在我的主要功能。如果必须使用参数参数,我有问题。
例,主(INT ARGC,CHAR *的argv []))或只是主(无效))
,从我到目前为止已经搜索,FILE * FP不能得到用户从stdin进入它只用来打开文件(?),但我需要让用户从键盘输入并传递给函数。我写了一些代码。但他们似乎没有工作,但我打算在这里放下一个,我相信我最需要一些改变。
#define LINESIZE1024
int main(void){
FILE *fp;
char line[LINESIZE];
char first;
char last;
char comma;
while(1){
if(!fgets(line,LINESIZE,stdin)){
clearerr(stdin);
break;
}
if(fp = (sscanf(line,"%s %s %s",&last,&comma,&first)==3))
get_name(fp);
if(get_last_first(fp)== -1)
break;
printf("Please enter first name a comma and then last name");
}
但是,我得到一个错误,说我不能使用它从指针传递给一个整数。还有很多更多,但我不小心关闭了我的concolse,并且在我尝试修复时出现的所有错误都消失了。所以请给我一些想法。
什么代码Seconde系列
while(1){
if(!fgets(line,LINESIZE,fp)){
clearerr(stdin);
break;
}
if(sscanf(line,"%s %s %s",last,comma,first)==3)
get_last_first(fp);
return 0;
}
它给了我的错误了。 fp,最后,首先,在这个函数中使用未初始化的逗号
好吧,我想我已经解决了以前的问题。但是,如果名称正确给定,它不会打印回名称。这是我的固定主代码。
int main(void){
FILE *fp = stdin;
char line[LINESIZE];
char first[16];
char last[16];
while(1){
if(!fgets(line,LINESIZE,stdin)){
clearerr(stdin);
break;
}
if(sscanf(line,"%s ,%s",last,first)==2)
if(get_name(fp)==2)
printf("Your name is: %s %s\n", first, last);
}
return 0;
}
这里是我的功能。
int get_name(FILE *fp){
char line[LINESIZE];
char last[16], first[16];
int n;
/* returns -1 if the input is not in the correct format
or the name is not valid */
if(fgets(line, LINESIZE, fp) == NULL) {
return -1;
}
/* returns 0 on EOF */
if((n = sscanf(line, " %[a-zA-Z-] , %[a-zA-Z-]", last, first)) == EOF) {
return 0;
}
/* prints the name if it's valid */
if((n = sscanf(line, " %[a-zA-Z-] , %[a-zA-Z-]", last, first)) == 2) {
return 2;
}
return 1;
}
我非常感谢你们花时间阅读和帮助我。请不要吝啬:)
表达式'(sscanf(line,“%s%s%s”,&last,&comma,&first)== 3)'不会返回一个'FILE *'。你应该启用警告。 – Medinoc
是否要将输入的名称存储在文本文件中? – Gaurav
@GauravPathak no。我不想。我的老师说:“测试时使用stdin作为FILE * - 你不需要打开任何文件。”所以我很困惑如何获得用户输入并将其作为* fp传递。 – dyingStudent