【问题标题】:Can printf print defined strings?printf 可以打印定义的字符串吗?
【发布时间】:2016-11-22 15:55:52
【问题描述】:

是否可以扫描一个字符,将其传递给一个 char 数组,然后如果将 a 定义为字符串以打印该字符串?下面是代码,(它得到警告“从不同大小的整数转换为指针”) 提前致谢

 char *a = "alpha";
 int main()
 {
     char *A[80];
     char ch;
     printf("enter message");
     scanf(" %c", &ch);
     A[0] = (char *) ch;
     printf("%s\t", A[0]);

     return 0;
 }

【问题讨论】:

  • %s 想要一个 c-string: null 终止的字符数组...ch 是单个字符。顺便说一句,您正在将 char 分配给指针,因为编译器正试图通过该警告告诉您。
  • 抱歉,我不能很好地理解您的问题,尤其是“打印定义的字符串”和“如果 a 被定义为打印该字符串的字符串”部分。你能再解释一下吗?
  • 要将扫描的字符传递给 char 数组,您需要可修改的 char 数组。字符串文字不可修改。
  • 是的,对此感到抱歉。我想输入一些字符,如果输入“a”,我希望它打印“alpha”。我问这是否可能,或者我是否应该使用 if。
  • %s 无法打印字符。如果你想输入 'a' 应该打印 alpha 然后使用 if..else 条件

标签: c string printing character compiler-warnings


【解决方案1】:

你想要的可能是这样的。

#include <stdio.h>

/* word candidate list: terminated by NULL */
const char* a[] = {
    "alpha",
    NULL
};

int main(void)
{
    char ch;
    int i;
    /* read input */
    printf("enter message");
    if (scanf(" %c", &ch) != 1)
    {
        puts("read error");
        return 1;
    }
    /* search for matching word(s) */
    for (i = 0; a[i] != NULL; i++)
    {
        /* if the first character of the word is what is scanned, print the word */
        if (a[i][0]  == ch)
        {
            printf("%s\t", a[i]);
        }
    }
    return 0;
}

【讨论】:

    【解决方案2】:

    这就是您可能要写的内容:

    int main()
    {
      char A[80];
      char ch;
      printf("enter message");
      scanf(" %c", &ch);
      A[0] = ch;
      printf("%c\t", A[0]);
    
      return 0;
    }
    

    您没有正确声明数组A,当您打印char (A[0]) 时,您应该在printf() 函数中使用%c

    如果要将其打印为字符串(%s 修饰符),则需要 NULL 终止它,这意味着在字符串末尾添加 \0

    【讨论】:

    • 是的,但如果扫描“a”,我希望它打印“alpha”
    • a是第一个字母,或者当字符串包含a时?或者是其他东西?您需要指定。
    【解决方案3】:

    如果您想从 char 创建一个字符串并使用 "%s" 打印它,那么您需要执行以下操作:

    char *a = "alpha";
     int main()
     {
         char A[80] = {0};
         char ch;
         printf("enter message");
         scanf(" %c", &ch);
         A[0] = ch;
         printf("%s\t", A);
    
         return 0;
     }
    

    您的代码中的错误是:

    1. 您声明的是一个 char 指针数组,而不是一个 字符
    2. 您分配的 char 类型转换为 char *

    3. 由于声明了 char,您的打印语句不正确 数组错误。

    请注意,我已将数组A 初始化为0,因此字符串会自动以空值终止。

    根据您的评论,您预期的解决方案的更新代码:

    char *a = "alpha";
     int main()
     {
         char ch;
         printf("enter message");
         scanf(" %c", &ch);
         if (ch == 'a')
           printf("%s\t", a);
         return 0;
     }
    

    【讨论】:

    • 谢谢。我试过了,但它会打印扫描的字符。 (即使我输入“a”,它也只打印“a”而不是“alpha”)。
    • 请查看更新的解决方案。这是你所期待的吗?
    • 你的意思是用户应该输入变量名然后它应该打印那个变量吗?
    【解决方案4】:

    试试这个代码,我现在在手机上。我没有测试过。

    int main()
    {
        char A[80];
        char ch;
        printf("enter message");
        A[0] = (char)fgetc(stdin);
        printf("\n%c\n", A[0]);
    
        return 0;
    }
    

    【讨论】:

    • 要输入一个字符,使用 fputc() 而不是 scanf()。如果 ch 是一个字符串,您必须将 ch 定义为一个数组或分配给 char 的指针,并将 printf 修改器从 %c 更改为 %s。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多