【问题标题】:How can I take input character in a character array using %c and produce the right output using %s?如何使用 %c 获取字符数组中的输入字符并使用 %s 生成正确的输出?
【发布时间】:2020-12-09 09:09:38
【问题描述】:

这是我的代码。

#include<stdio.h>
#include<string.h>
int main()
{
        int n, i;
        char ch[100];
        scanf("%d", &n);
        for(i = 0; i < n; i++){
                scanf(" %c", &ch[i]);
        }
        printf("%s\n", strupr(ch));
        return 0;
}

首先,我想取 n 变量中字符数组的大小。之后,我想取 n 个字符并分配数组。该程序的输出是正确的,但它也会产生一些垃圾值。

例如:

5
s d g h f
Output: SDGHFC└U▄■` 

如何忽略输出中的垃圾值?

【问题讨论】:

  • 在 c/cpp 中,字符串需要以 '\0' 字符结尾来标识字符串的结尾。您需要在第 n 个索引处的循环之后手动添加它。请记住这一点,当输入“n”本身为 100 时,您将遇到边界情况,这将产生类似于您现在得到的结果
  • 请给我一个编码示例!!!谢谢。
  • 请给我一个编码示例!!!谢谢。

标签: arrays c string output character


【解决方案1】:

只需将数组 ch[] 初始化为全零。即。

  for (i = 0; i < 100; i += 1) { ch[i] = '\0'; }
 

将此行放在 ch[] 的声明之后。

【讨论】:

  • char ch[100]; --> char ch[100] = { 0 }char ch[100] = ""initialization 的作用相同。 for() 循环稍后是 assignment
【解决方案2】:

当您阅读字符时,您在输入中提供的空格也将被视为字符,并且 strupr(c) 会给出一些粗糙的输出,您还必须在字符数组的末尾手动提供空字符.下面的程序可能会帮助您找到答案

#include<stdio.h>
#include<string.h>
int main()
{
        int n, i;
        scanf("%d", &n);
        fflush(stdin);
        char ch[100];
        for(i = 0; i < n; i++){
                char temp;
                scanf("%c", &temp);
                if(temp != '\n')
                    ch[i] = temp;
                else
                    break;
        }
        ch[n] = '\0';
        printf("%s\n", strupr(ch));
        return 0;
}

你的输入应该是这样的

5
sdghf

用空格输入。程序将如下所示。

#include<stdio.h>
#include<string.h>
int main()
{
        int n, i;
        scanf("%d", &n);
        fflush(stdin);
        char ch[100];
        char temp;
        i = 0;
        while(scanf("%c", &temp)){
                if(temp == ' ')
                    continue;
                if(temp != '\n')
                    ch[i++] = temp;
                else
                    break;
        }
        ch[i] = '\0';
        printf("%s\n", strupr(ch));
        return 0;
}

现在,您可以根据需要为您的角色进行任何排列。

【讨论】:

  • 有没有办法通过空格来获取字符输入?我的意思是字符然后空间....等等。
  • 有没有办法通过空格来获取字符输入?我的意思是字符然后空间....等等。
  • 是的,您可以这样做,我正在根据您的要求编辑我的答案。
  • 注意:fflush(stdin); 是 UB。
  • 非常感谢。我得到了答案。但是 fflush(stdin) 以我闻名。如果您知道,除此之外的任何内容,请针对此问题进行描述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
  • 2012-07-30
相关资源
最近更新 更多