【问题标题】:Creating an array of strings through user input in c?通过c中的用户输入创建字符串数组?
【发布时间】:2015-09-21 08:27:41
【问题描述】:

我是 C 新手,所以澄清一下会很有帮助!我正在尝试使用扫描仪向我的程序询问我将存储的一系列单词..到目前为止我所拥有的是,

     char[]listOfWords[9999]; //creates a large array of characters
     scanf("%s", listOfWords); //stores inputs into listOfWords

有了这个,我可以很容易地访问第一个词,但涉及到访问第二个和第三个词的问题..有什么建议吗?例如,我的输入是怎样的

 Hello how are you guys

我可以访问“你好”没问题,但我怎么称呼“如何”和“是”

【问题讨论】:

  • char[]listOfWords[9999]; 不会编译。至于问题,%s 会一直读取直到找到空白字符。您可以一次又一次地拨打scanf 来阅读每个单词。或者干脆使用scanf("%[^\n]", listOfWords); 阅读整行。请注意,如果要读取的第一个字符是\n,则先前的方法将失败,并且它会在stdin 中留下换行符。另一种方法是使用fgets(listOfWords, sizeof(listOfWords), stdin);。请注意,fgets 使用换行符并将其存储在 listOfWords 中。
  • char[]listOfWords[9999]; ......绝对不是 C......
  • 是的,我使用了 [100] 我只是匆匆完成我的方法,我很抱歉。这是一个有趣的技术,谢谢!我的问题是,如果我这样使用它,我怎么会盲目地知道每个单词的长度?因为我相信这只会创建一长串字符,例如
  • [h,e,l,l,o, ,,h,o,w,...]
  • @user201535 如果要将整行读入listOfWords,则需要使用strtok 和空格作为分隔符来获取每个单词。然后,使用strlen 查找每个单词的长度。

标签: c arrays character scanf


【解决方案1】:

Scanf() 只接受单个单词的输入。(不是在空格之后。)

要输入多个单词,可以使用 gets(string)scanf("%[^\n]", string)。

【讨论】:

  • gets 很危险,并且在最新的 C 标准中已被弃用。请改用fgets
  • "Scanf() 只接受单个单词的输入" -- 这是误导。格式说明符,特别是 %s 负责这个。
  • 虽然 fgets 是一个更好的选择,但有时候 Still get 更方便。 (至少我是这么认为的。它远离文件操作。)即使你不想使用它,也可以使用 scanf 选项。
  • @CoolGuy 这句话与有问题的例子不符。
【解决方案2】:

这 - char[]listOfWords[9999]; 不是声明数组的有效语法。

你只需要声明一个数组 -

char s[100];  
fgets(s,100,stdin);  // take input and store it in s

并且使用strtoksscanf 您可以在不同的数组中提取单独的单词。

或者你可以使用二维数组 -

char s[100][100];

所以如果存储在其中的字符串是 - Hello how are you guys

然后通过s[0],您将获得Hellos[1] 将给出how,类似地,字符串中的其他单词。

【讨论】:

  • 不应该是 fgets(s,99,stdin); ?
  • @Michi 为什么? fgets 将在末尾添加 null character
  • 我问的是因为如果你得到 100 个字母 + '\0' 它将是 101。或者这里只有 99 fgets(s,100,stdin);
  • @Michi 不,我不认为这会发生。它将在100-1(通常n-1)即(99)字符被读取时停止。 n 是给它的大小。
  • @Michi 是的。你可以在这里阅读 - cplusplus.com/reference/cstdio/fgets
【解决方案3】:
  • 这是您正在寻找的代码,

    #include <stdio.h>
    
    int main()
    {
       char str[5][10];
    
       printf("enter the strings...\n");
       for(int i =0; i < 5; i++)
       scanf("%s", str[i]);
    
       printf("All strings are...\n");
       for(int j =0; j < 5; j++)
       printf("%s\n", str[j]);
    }
    

【讨论】:

    【解决方案4】:

    你的问题是阅读多个单词吗?或者只是读一整行?声明char[]listOfWords[9999] 也是错误的。如果您只想阅读一行,可以尝试以下操作:

    char buffer[1024];
    fgets(buffer, 1024, stdin);
    

    【讨论】:

      猜你喜欢
      • 2021-11-27
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2021-09-05
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多