huafeng 发表于 2023-11-5 11:25:50

scanf报错

#include<stdio.h>
int main()
{
        printf("please input first character:");
        char ch, c1, c2;
        scanf_s("%c", &ch);
        switch (ch)
        {
        case 'm':
        case 'M':printf("Monday\n"); break;
        case 'w':
        case 'W':printf("Wednesday\n"); break;
        case 'f':
        case 'F':printf("Friday\n"); break;
        case 't':
        case 'T':scanf_s("%c", &c1);
                switch (c1)
                {
                case 'h':printf("Thursday\n"); break;
                case 'u':printf("Tuesday\n"); break;
                default:printf("illegal input!\n"); break;
                }
        case 's':
        case 'S':sacnf_s("%c", &c2);
                switch (c2)
                {
                case 'a':printf("Saturday\n"); break;
                case 'u':printf("Sunday\n"); break;
                default:printf("illegal input!\n"); break;
                }
        default:printf("illegal input!\n"); break;
        }
        return 0;
}
报错:没有为格式字符串传递足够的参数,占位符和其参数预计 2 可变参数,但提供的却是 1 参数,缺失的可变参数 2 为格式字符串“%c”所需

isdkz 发表于 2023-11-5 11:25:59

问题出在第34行和第40行的代码中。在这两行中,您使用了 sacnf_s 而不是 scanf_s 。这是一个拼写错误,应该使用 scanf_s 函数。

sacnf_s 应该被替换为 scanf_s ,以便正确读取输入字符并将其存储在相应的变量中。修复后的代码如下:

#include<stdio.h>
int main()
{
    printf("please input first character:");
    char ch, c1, c2;
    scanf_s("%c", &ch);
    switch (ch)
    {
    case 'm':
    case 'M':printf("Monday\n"); break;
    case 'w':
    case 'W':printf("Wednesday\n"); break;
    case 'f':
    case 'F':printf("Friday\n"); break;
    case 't':
    case 'T':scanf_s("%c", &c1);
      switch (c1)
      {
      case 'h':printf("Thursday\n"); break;
      case 'u':printf("Tuesday\n"); break;
      default:printf("illegal input!\n"); break;
      }
      break;
    case 's':
    case 'S':scanf_s("%c", &c2);
      switch (c2)
      {
      case 'a':printf("Saturday\n"); break;
      case 'u':printf("Sunday\n"); break;
      default:printf("illegal input!\n"); break;
      }
      break;
    default:printf("illegal input!\n"); break;
    }
    return 0;
}


修复后的代码将正确读取输入字符并输出相应的结果。

Mike_python小 发表于 2023-11-5 11:26:47

scanf_s报错解决方案

在代码中,当我们使用scanf_s函数时,需要注意到该函数需要传入两个参数:要读取的格式字符串以及对应的变量地址。

在上述代码中,有两处出现了错误的scanf_s函数调用,分别是:


scanf_s("%c", &c1);



sacnf_s("%c", &c2);


这两处调用都缺失了一个必要的参数,即格式字符串"%c"所需的第二个参数。正确的调用方式应该是:


scanf_s("%c", &c1, 1);



scanf_s("%c", &c2, 1);


在这里,第三个参数1表示要读取的字符数,因为我们只需要读取一个字符,所以值为1。

修改后的完整代码如下:


#include <stdio.h>

int main() {
    printf("please input first character:");
    char ch, c1, c2;
    scanf_s("%c", &ch, 1);
    switch (ch) {
      case 'm':
      case 'M':
            printf("Monday\n");
            break;
      case 'w':
      case 'W':
            printf("Wednesday\n");
            break;
      case 'f':
      case 'F':
            printf("Friday\n");
            break;
      case 't':
      case 'T':
            scanf_s("%c", &c1, 1);
            switch (c1) {
                case 'h':
                  printf("Thursday\n");
                  break;
                case 'u':
                  printf("Tuesday\n");
                  break;
                default:
                  printf("illegal input!\n");
                  break;
            }
            break;
      case 's':
      case 'S':
            scanf_s("%c", &c2, 1);
            switch (c2) {
                case 'a':
                  printf("Saturday\n");
                  break;
                case 'u':
                  printf("Sunday\n");
                  break;
                default:
                  printf("illegal input!\n");
                  break;
            }
            break;
      default:
            printf("illegal input!\n");
            break;
    }
    return 0;
}


希望以上内容能够解决你的问题。如果还有其他疑问,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: scanf报错