【问题标题】:scanf a string with size limit without ignoring spaces扫描具有大小限制的字符串而不忽略空格
【发布时间】:2021-04-05 23:58:05
【问题描述】:

我在将字符串扫描到每个字符串最长为 256 的矩阵时遇到问题。

试过了,还是不行,有人有解决办法吗?

#include<stdio.h>
#include<string.h>

void main()
{
    char* song[5][256];
    for (int i = 0; i < 5; i++)
        scanf("%255[^\n]s", song[i]);
}

【问题讨论】:

  • a) char* song[5][256]; 应该是 char song[5][256]; b) "%255[^\n]s" 应该是 " %255[^\n]"(添加一个空格,删除 s)。
  • ... 和 void main() 应该是 int main(void)
  • #include&lt;string.h&gt; 没用
  • @WeatherVane 您应该将其发布为答案。除非 "%[]s" 有一个共同的 dup

标签: c string scanf


【解决方案1】:

欢迎来到stackoverflow, 首先,我不确定你为什么使用 char *song[5][256],但你可以通过使用二维数组来实现所需的输出,即 ..char song[5][256]。还有我确信对像数组这样的矩阵使用 scanf 函数总是会引起麻烦。

#include<stdio.h>
int main()
{
    char s[5][256];
    for(int i=0;i<5;i++)
    {
        for(int j=0;j<256;j++)
        {       char c=getchar();
            if(c=='\n'||c== EOF)

            {   
                s[i][j]='\0';
                printf("\n");
                break;
            }
            if(j<255)
                s[i][j]=c;
            if(j==255)
                s[i][j]='\0';

        }
        printf("the given string  %d is:%s \n",i+1,s[i]);

    }
    return 0;

}

而且我还使用了两个 for 循环,用于分配该数组的元素。现在代码工作正常。我使用了你的 variale 名称歌曲的 s。 希望我回答了你的问题。

【讨论】:

  • 很棒的代码!只有一些缩进问题,您应该将char c=getchar(); 更改为int c = getchar(); if (c == EOF || c == '\n')
  • 太棒了!但EOFint,而不是char
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 2020-09-14
  • 2014-01-23
  • 2023-04-05
  • 1970-01-01
  • 2015-12-06
相关资源
最近更新 更多