[英]Read a string as an input using scanf
我是 C 語言的新手,我正在嘗試從用戶那里讀取一個字符和一個字符串(一個句子;最大長度 25)。
不確定我在以下代碼行中做錯了什么,它給了我一個錯誤“段錯誤”。
#include <stdio.h>
int main(){
char * str[25];
char car;
printf("Enter a character: ");
car = getchar();
printf("Enter a sentence: ");
scanf("%[^\n]s", &str);
printf("\nThe sentence is %s, and the character is %s\n", str, car);
return 0;
}
謝謝!
您必須進行四項更改:
改變
char * str[25];
到
char str[25];
因為您想要一個包含 25 個char
的數組,而不是一個包含 25 個指向char
指針的數組。
改變
char car;
到
int car;
因為getchar()
返回一個int
,而不是一個char
。
改變
scanf("%[^\\n]s", &str);
到
scanf( "%24[^\\n]", str);
這告訴scanf
'\\0'
為 +1)或直到一個\\n
並將其存儲在str
。改變
printf("\\nThe sentence is %s, and the character is %s\\n", str, car);
到
printf("\\nThe sentence is %s, and the character is %c\\n", str, car);
因為char
的正確格式說明符是%c
,而不是%s
。
str
是一個包含 25 個指向char
指針的數組,而不是一個char
數組。 所以將其聲明更改為
char str[25];
並且您不能使用scanf
來閱讀句子——它會在第一個空格處停止閱讀,因此請改用fgets
來閱讀句子。
在您的最后一個printf
,您需要%c
說明符來打印字符,而不是%s
。 您還需要刷新標准輸入,因為stdin
剩余一個'\\n'
,因此您需要將這些字符扔掉。
修改后的程序現在是
#include <stdio.h>
void flush();
int main()
{
char str[25], car;
printf("Enter a character\n");
car = getchar();
flush();
printf("Enter a sentence\n");
fgets(str, 25, stdin);
printf("\nThe sentence is %s, and the character is %c\n", str, car);
return 0;
}
void flush()
{
int c;
while ((c = getchar()) != '\n' && c != EOF)
;
}
// 這是對您的代碼進行的最小更改以使其正常工作
#include <stdio.h>
int main(){
char car,str[25];
printf("Enter a character: ");
car = getchar();
printf("Enter a sentence: ");
scanf("%s", str);
printf("\nThe sentence is %s, and the character is %c\n", str, car);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.