[英]How to read a string from user input in C, put in array and print
我是C語言的新手,我讀過C語言書的幾章,現在我必須做作業,但我都很困惑,希望有人能幫助我。
我必須從用戶(字符數組)輸入中讀取2個字符串,最大長度為100個字符,並將其轉換為大寫字母,並在每個單詞之后用換行符\\ n打印出來。
到目前為止,我有:
int main() {
char chars[100];
int i = 0;
char str1;
char str2;
int j = 0;
scanf("\n %c", str1);
scanf("\n %c", str2);
while (str1[i] != '\0') {
chars[i] = str1[i];
toupper(chars[i]);
printf(chars[i]);
i++;
}
while (str2[j] != '\0') {
chars[j] = str2[j];
toupper(chars[j]);
printf(chars[j]);
j++;
}
return 0;
}
接受用戶的2個輸入后,它說停止運行,說運行失敗。
這是您的直接問題:
scanf("\n %c", str1);
此格式字符串告訴scanf
讀取一定數量的空格,后跟單個字符,該空格將存儲在str1
。
@ H2CO3是正確的: scanf
幾乎永遠不是從用戶讀取輸入的正確答案。 它不執行邊界檢查,並且對用戶輸入的格式過於挑剔。 一個意想不到的角色會完全混淆它。 強烈建議您盡可能使用fgets
代替:
fgets(str1, 100, stdin);
如果不允許這樣做,您應該問您的教授為什么不這樣做。 認真。
如果您絕對必須使用scanf
讀取此處的輸入,則可以按照其答案中所述的@ user2479209進行操作。
您的程序還有另一個問題,就是toupper(chars[i])
不會更改存儲在chars[i]
的值。 您必須將toupper
的結果顯式分配回數組,例如:
chars[i] = toupper(chars[i]);
將str1和str2更改為array。 在前兩個scanf中使用%100 [^ \\ n]。這是讀取帶空格的字符串的正則表達式技巧。
char str1[101];
char str2[101];
scanf("%100[^\n]",str1);
scanf("%100[^\n]",str2);
這將包含兩個字符串。輸入第一個字符串后,按Enter鍵輸入第二個字符串。
我認為您也可以使用scanf_s
(安全scanf
)並一次收集用戶輸入的兩個字符串。 您還可以在程序頂部, main
外部和#include
preprocesor指令下方,將數組大小定義為符號常量,以提高靈活性。
// Symbolic constants
#define SIZE 101
char str1[SIZE];
char str2[SIZE];
scanf_s("%100s%100s", str1, SIZE, str2, SIZE);
或者:
scanf_s("%100s", str1, SIZE);
scanf_s("%100s", str2, SIZE);
我認為,如果您不想執行#define SIZE 101
,也可以執行以下操作:
scanf_s("%100s", str1, 101);
scanf_s("%100s", str2, 101);
我是C的新手,請隨時改進此答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.