[英]String Only recording first word
我剛剛開始使用C語言進行編程,我正在編寫一個cypher / decypher程序。 要求用戶輸入存儲為char *的短語。 問題是程序只存儲字符串的第一個單詞,然后忽略它后面的所有內容。 這是獲取字符串然后分析它的代碼部分
int maincalc(int k) //The Calculation Function for Cyphering
{
char *s;
s=(char*) malloc(sizeof(100));
printf("Please enter the phrase that you would like to code: ");
fscanf(stdin,"%s %99[^\n]", s);
int i=0;
int n=strlen(s);
while(i<n)
{
if(s[i]>=65&&s[i]<=90) //For Uppercase letters
{
int u=s[i];
int c=uppercalc(u,k);
printf("%c",c);
}
else if(s[i]>=97&&s[i]<=122) //For Lowercase letters
{
int u=s[i];
int c=lowercalc(u,k);
printf("%c",c);
}
else
printf("%c",s[i]); //For non letters
i++;
}
free(s);
printf("\n");
return 0;
}
只需知道該怎么做才能使程序確認整個字符串的存在,而不僅僅是第一個字。 謝謝
不,沒有人工作。 使用fscanf不會等待用戶輸入。 它只是打印“請輸入短語...”然后退出fgets也做同樣的事情,程序不等待輸入,只打印“PLease enter ...”然后退出。
在該評論中,在編輯之前,您提到了一些先前的輸入。 我的通靈調試功能告訴我,輸入緩沖區中仍然存在來自先前輸入的換行符。 這會
fgets(s, 100, stdin);
和
fscanf(stdin, "%99[^\n]", s);
立即返回,因為他們立即遇到表示輸入結束的換行符。
在獲得更多字符串輸入之前,您需要從緩沖區使用換行符。 你可以用
fscanf(stdin, " %99[^\n]", s);
格式開頭的空格占用輸入緩沖區中的任何初始空格,或清除輸入緩沖區
int ch;
while((ch = getchar()) != EOF && ch != '\n);
if (ch == EOF) {
// input stream broken?
exit(EXIT_FAILURE);
}
在使用fgets
或fscanf
獲取輸入之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.