如何在main之外修复此scanf + while循环函数?

时间:2018-05-27 02:01:35

标签: c

这目前工作正常,但在我的主要功能

while((strcmp(country, "Australia")) && (strcmp(country, "Japan")))
{
    printf("Please select only Australia or Japan");
    scanf("%s", &country);
    case_change(country); // function to lowercase any uppercaseletter //
}

如何将其置于单独的功能中。 (基本上是另一个.c文件)? 我尝试过做这样的事情,但它不断给出分段错误。

我还希望它一直重复,直到输入正确的输入

int main()
{
  printf("Please select only Australia or Japan");  
  scanf("%s", &country);

  char * selection = testing_function(country);
  printf("The country you have selected is %s", selection);
}

int testing_function(char * country) 
{
    while((strcmp(country, "Australia")) && (strcmp(country, "Japan")))
    {
        printf("Please select only Australia or Japan");
        scanf("%s", &country);
        case_change(country);  // function to lowercase any uppercaseletter //
    }
return(country);
}
PS:我还没有完成“国家”的情况。所以我想把它作为一个字符串,如果这是有意义的。

1 个答案:

答案 0 :(得分:2)

您的代码有几个问题:

  • testing_function - 当你的原型返回int
  • 时,不能返回char *
  • 在使用country导致段错误之前,没有country的分配。在将testing_function传递给scanf
  • 之前,您必须确保&country已正确分配
  • %s函数错误,因为您传入指向char(country)的指针而不是指向char的指针,正如控制字符串testing_function
  • 所期望的那样
  • 实际上没有必要返回任何内容,您只需将void testing_function(char * country) { while((strcmp(country, "Australia")) && (strcmp(country, "Japan"))) { printf("Please select only Australia or Japan"); scanf("%s", country); } } int main() { char country[1000] = ""; testing_function(country); printf("The country you have selected is %s", country); } 作为char指针传入,并在{{1}}
  • 中修改它

大概这会起作用:

{{1}}