gpt4 book ai didi

c - 为什么 scanf 会跳过获取字符串输入?

转载 作者:行者123 更新时间:2023-11-30 18:16:39 25 4
gpt4 key购买 nike

我正在尝试将多个单词输入和多行放入一个数组中。但在某个地方,代码会跳过获取输入并跳过程序结束。我尝试在“%s”(或“%s”)之前和之后添加空格,但它不起作用(可能是因为它在循环内?)。非常感谢任何人的帮助!如果我输入超过两到三个单词,它也会开始变得奇怪:(我的目标是找出特定字母在所有这些单词和行中出现了多少次。

#include <stdio.h> //include standard library

int main(){
int lineCount, occuranceCount;
printf("How many lines are you going to enter?");
scanf("%d", &lineCount);

char input[lineCount][100], searchChar;

for(int i=0; i<lineCount; i++){
printf("Please enter line #%d (100 characters of less):",i+1);
scanf("%s", &input[i]);
}

printf("What letter do you want to check the frequence in those lines? ");
scanf("%c", &searchChar);

for(int j=0; j<lineCount; j++){
for(int k=0; k<100; k++){
if(input[j][k] != '\0'){
if(input[j][k]==searchChar)
occuranceCount++;
}
}
}

printf("The letter occurs for %d time", occuranceCount);

return 0;
}

最佳答案

  scanf(" %c", &searchChar);
^

您需要此处的空间来使用来自 stdin 的任何 \n

此外,scanf() 将读取一个单词,而不是您所想的一行(空格分隔的单词)。

而且最好使用 strlen(input[j]) 来了解您应该阅读多少内容。

另一件事,在循环中使用 size_t 而不是 int

occurrenceCount初始化为0

此外,为了避免缓冲区溢出漏洞,请在代码中使用scanf("%99s", input[i]);

为了读取一行,您可以使用fgets()

关于c - 为什么 scanf 会跳过获取字符串输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47278102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com