【发布时间】:2017-11-14 05:11:53
【问题描述】:
我正在尝试将多个单词输入和多行输入到一个数组中。但是代码在某处跳过获取输入并跳过结束程序。我尝试在“%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;
}
【问题讨论】:
-
这是推荐使用
fgets(或POSIXgetline)而不是scanf的主要原因之一您使用的函数,您必须验证返回以确保在下次尝试访问您尝试访问的内容时不会调用Undefined Behavior阅读。 -
scanf("%s", &input[i]);->scanf("%99s", input[i]); -
为什么会出现 skps 的摘要? (1)您使用
scanf ("%d"...)阅读,留下'\n'(来自用户在stdin中按Enter。(2)您调用scanf ("%s"...),因为"%s"format specifier 从头读取到第一个 whitepace ('\n'是空白),它没有从stdin中删除;(3)你很高兴地调用scanf ("%c"...)接受'\n'作为其输入的 字符 并且 (4) 您未能检查所有调用的返回。 -
“寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及重现所需的最短代码它在问题本身。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建minimal reproducible example!"
-
您的问题缺少您输入程序并从中接收的确切输入/输出。