我试图将多个单词输入和多行输入到一个数组中.但某些地方代码跳过获取输入并跳过结束程序.我已经尝试在'%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;
}
Run Code Online (Sandbox Code Playgroud) 当我比较getchar()!='/ n'时,我收到警告:多字符字符常量.我为什么这么干?我在C中编码并使用gcc作为编译器.我认为getchar读取一个字符并将其转换为int本身.那么多字符字符常量的含义是什么?
这是一个问题C.程序控制流程不符合预期.它要求输入字符,但没有要求输入字符x.
int foo();
int main(int argc, const char * argv[]) {
foo();
return 0;
}
int foo(){
char in;
char x;
printf("Do you wanna party \n");
if((in = getchar()) == 'y')
printf("Go Sleep!, I was kidding\n");
else
printf("Oh! you are so boaring..\n");
printf("\nOk, Another Question\n");
printf("Wanna Go to Sleep\n");
if((x = getchar()) == 'y')
printf("ok lets go, Sleepy Head\n");
else
printf("No, lets go\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud) 根据我对 C 中宏的理解,它们是预定义的常量,将在整个程序中使用它们的常量值,所以我们继续定义它们以避免进一步的复杂性并使代码更具可读性,因此人们阅读它会明白什么应该保持不变,什么不是。
我在这里和那里读过(C 编程现代方法,KN King)我们可以将这两个函数定义为宏。
由于我对 C 有点陌生,我无法理解这两个如何定义为宏?
正如书中所写——
问题在于区分输入的结尾和有效数据。解决方案是,当没有更多输入时,getchar 返回一个独特的值,该值不能与任何实际字符混淆。该值称为 EOF,即“文件结束”。我们必须将 c 声明为一个足够大的类型,以容纳 getchar 返回的任何值。我们不能使用 char,因为除了任何可能的 char 之外,c 还必须足够大才能容纳 EOF。因此我们使用 int。
main()
{
int c;
c = getchar();
while(c != EOF) {
putchar(c);
c = getchar();
}
}
Run Code Online (Sandbox Code Playgroud)
我无法理解使用 int 而不是 char 的实际原因。EOF 将返回无法存储在 char 中的内容。